更改df的格式并删除不需要的字符

时间:2017-10-17 18:41:20

标签: python pandas dataframe currency

我有以下数据框:

Name             Price  
AG              €26.74
BAE             €0.25
C&C             Nan
CRH             €30.57

我想从数字中删除欧元符号并将列价格转换为数字。

期望的输出

Name            Price   
AG              26.74
BAE             0.25
C&C             Nan
CRH             30.57

我在想的是:

df['Price'].map(lambda x:str(x)[1:])

但是这会将Nan值修改为an,并且我希望保留具有Nan值的行。

我也想:

df['Price'].split("€")[1]

但输出

'Series' object has no attribute 'split'

有没有更好的方法来获得剩余Nan值的所需输出?

2 个答案:

答案 0 :(得分:2)

In [27]: df.Price = pd.to_numeric(df.Price.str.replace(r'[€]', ''), errors='coerce')

In [28]: df
Out[28]:
        Name  Price
0         AG  26.74
1        BAE   0.25
2  C&C Group    NaN
3        CRH  30.57

In [29]: df.dtypes
Out[29]:
Name      object
Price    float64   # <-----
dtype: object

答案 1 :(得分:2)

我是这样做的:DELETE FROM tblCost AS C1 WHERE EXISTS (SELECT 1 FROM tblCost AS C2 WHERE C1.AllocationMonthYear = C2.AllocationMonthYear AND C1.ProjectID = C2.ProjectID AND C1.TimeStamp > C2.TimeStamp) + pd.to_numeric

str.replace

正则表达式df.Price = pd.to_numeric(df.Price.str.replace('[^\d.]', ''), errors='coerce') print(df.Price) 0 26.74 1 0.25 2 NaN 3 30.57 Name: Price, dtype: float64 会删除货币值中不是有效符号的任何内容。

如果您想考虑其他表示(例如指数和-ve数),请改用[^\d.]