我想转换一个元素类型为喜欢的数字和字符混合的列,并且想将该列转换为Integer
类型。
Input:
df = pd.DataFrame({'id':['Q001','Q021']})
Output:
id
0 Q001
1 Q021
Expected
:
id idInt
0 Q001 1
1 Q021 21
答案 0 :(得分:9)
或在每个字符串中将pd.Series.str.replace
的正则表达式'\D+'
替换为''
:
df['idInt']=df['id'].str.replace('\D+','').astype(int)
现在:
print(df)
是:
id idInt
0 Q001 1
1 Q021 21
答案 1 :(得分:4)
使用正则表达式\d+
的{{3}}强制转换为整数:
df['idInt'] = df['id'].str.extract('(\d+)').astype(int)
print (df)
id idInt
0 Q001 1
1 Q021 21
答案的不同:
df = pd.DataFrame({'id':['12Q001','Q021']})
#remove non numeric
df['idInt1']=df['id'].str.replace('\D+','').astype(int)
#extract first numeric
df['idInt2'] = df['id'].str.extract('(\d+)').astype(int)
print (df)
id idInt1 idInt2
0 12Q001 12001 12
1 Q021 21 21
答案 2 :(得分:0)
与上述基于正则表达式的方法相比,另一种方法(较模糊)和通用性较低:
df["idIint"] = df["id"].str.rpartition("Q",expand=False).str[-1].astype(int)
哪种做法:
id idIint
0 Q001 1
1 Q021 21