处理各种货币字符串熊猫

时间:2018-07-02 14:05:21

标签: python pandas

我有数十万行数据,这些数据具有许多不同的货币形式,例如:

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*)

1 个答案:

答案 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

另一种手动解决方案将是splitreplace

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