我有以下数据框:
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值的所需输出?
答案 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.]
。