我有数十万行数据,这些数据具有许多不同的货币形式,例如:
116,319,545 SAR
40,381,846 CNY
57,712,170 CNY
158,073,425 RUB2
0 MYR
0 EUR
USD 110,169,240
这些值被读入DataFrame
中,我不确定最好的方法(如果有预先构建的方法?)是从所有可能的情况中获取整数值。数据中可能有更多货币。
目前我最好的方法是:
df1['value'].str.replace(r"[a-zA-Z,]",'').astype(int)
但是显然,条目xxxx RUB2
失败了。
除了有效答案外,还可以合理预期货币的重要性-得出正则表达式为([A-Z]+\d*)
答案 0 :(得分:2)
给出此df
df=pd.DataFrame()
df["col"]=["116,319,545 SAR",
"40,381,846 CNY",
"57,712,170 CNY",
"158,073,425 RUB2",
"0 MYR",
"0 EUR",
"USD 110,169,240"]
您可以在删除逗号后使用正则表达式'(\d+)'
df.col.str.replace(",","").str.extract('(\d+)').astype(int)
0
0 116319545
1 40381846
2 57712170
3 158073425
4 0
5 0
6 110169240
另一种手动解决方案将是split
和replace
df.col.str.split(' ').apply(lambda d: pd.Series(int(x.replace(",","")) for x in d if x.replace(",","").isdigit()).item())
0 116319545
1 40381846
2 57712170
3 158073425
4 0
5 0
6 110169240