Python 3.x 如何对包含数字和字符串的数据帧列进行标签编码?

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

我有这个DataFrame列

+-------------------------------------+--+
|                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