Python 3.x 如何对包含数字和字符串的数据帧列进行标签编码?
我有这个DataFrame列Python 3.x 如何对包含数字和字符串的数据帧列进行标签编码?,python-3.x,string,pandas,dataframe,encoding,Python 3.x,String,Pandas,Dataframe,Encoding,我有这个DataFrame列 +-------------------------------------+--+ | df: | | +-------------------------------------+--+ | Index Ticket* | | | 0 254326 | | | 1 CA
+-------------------------------------+--+
| df: | |
+-------------------------------------+--+
| Index Ticket* | |
| 0 254326 | |
| 1 CA345 | |
| 3 SA12 | |
| 4 267891 | |
| ' ' | |
| ' ' | |
| ' ' | |
| 700 CA356 | |
+-------------------------------------+--+
它包含两种类型的值。有些是纯数字,有些是包含字母和数字的字符串
许多行具有相同的字母(CA345、CA675等)。我想用相同的字母和数字对行进行分组和标记
例如,所有标记为0的“CA”行,所有标记为1的“SA”行
其余行都有六位数字(其中没有字母)。我想用相同的数字标记所有这样的行(例如2)我对python的知识不够,但是 你可以试试 及
正则表达式
比如:
第一次进近 定义自定义函数,检查行
是否为instance(val,str)
并包含“SA”
或“CA”
def标签\u票据(行):
如果isinstance(第['Ticket']行,str)和第['Ticket']行中的'CA':
返回0
如果isinstance(第['Ticket']行,str)和第['Ticket']行中的'SA':
返回1
返回2
将自定义函数应用于新列df('Label')
第二次进近 进一步了解情况,您似乎不知道在
df['Ticket']
中会出现哪些实例。在这种情况下,您可以使用搜索所有字符串模式,并相应地将它们分类到类别中
将熊猫作为pd导入
进口稀土
df=pd.DataFrame(列=['Ticket'],
数据=[[254326],
[CA345'],
['SA12'],
[267891],
['CA356']]
df['Pattern']=df['Ticket'].apply(lambda x:''.join(重新拆分([^a-zA-Z]*”,str(x)))
df_label=pd.DataFrame(df['Pattern'].unique(),columns=['Pattern'])。重置_索引(level=0)。重命名(columns={'index':'label'})
df=df.merge(df_标签,how='left')
打印(df)
票型标签
0 254326 0
1 CA345 CA1
2 SA12 SA 2
3 267891 0
4钙356钙1
但我需要做的第一件事是找出一种方法,找出系列中存在的所有此类实例。@首先,我用另一种方法更新了答案,该方法基于df[“Ticket”]
中出现的字符串模式进行分类,希望能有所帮助
ptrn=r'(?P<CA>(CA[\d]+))|(?P<SA>(SA[\d]+))|(?P<DIGIT>[\d]{6})'
import pandas as pd
import numpy as np
ls={'tk':[ '254326' , 'CA345', 'SA12' , '267891' , 'CA356' ]}
df = pd.DataFrame(ls)
s=df['tk'].str.extract(ptrn,expand=False)
newDf={0:[x for x in s['CA'] if pd.isnull(x)==False],1:[x for x in s['SA'] if pd.isnull(x)==False],2:[x for x in s['DIGIT'] if pd.isnull(x)==False]}
print(newDf)
{0: ['CA345', 'CA356'], 1: ['SA12'], 2: ['254326', '267891']}
df['Label'] = df.apply(label_ticket, axis=1)
print(df)
Ticket Label
0 254326 2
1 CA345 0
2 SA12 1
3 267891 2
700 CA356 0