我有一个df
,其中某些对象列包含$
,,
,负数和.
:
Date Person Salary Change
0 11/1/15 Mike $100.52 ($20)
1 11/1/15 Bill $300.11 ($300.22)
2 11/1/15 Jake - ($1,100)
3 11/1/15 Jack $411.43 $500
4 11/1/15 Faye NaN $1,000.12
5 11/1/15 Clay $122.00 $100
6 11/1/15 Dick $1,663.33 -
我想将它们转换为float
,但是当我尝试时:
df['Salary'] = df['Salary'].str.replace(',', '').str.replace('$', '').str.replace('-', '').astype(float)
我得到一个空的ValueError: could not convert string to float:
。似乎是-
引起了一些问题,因此是否有一种优雅的处理方法?
答案 0 :(得分:1)
我将使用普通的Python函数,因为它更易于编写和测试:
def conv(txt):
txt = str(txt)
txt = txt.strip()
neg = txt.endswith(')')
try:
val = float(txt.strip('$()-,').replace(',', ''))
except:
val = np.nan
return -val if neg else val
df['Salary'] = df['Salary'].apply(conv)
答案 1 :(得分:0)
尝试:
df['Salary'] = df['Salary'].str.replace(',', '').str.replace('$', '').str.replace('-', '0').astype(float)
您的问题很可能是试图将空白字符串转换为float。 Python不会将''视为浮点数。最好将其替换为0。
或更佳的解决方案:
df['Salary'] = df['Salary'].str.replace(',', '').str.replace('$', '').str.replace('-', '0')
df['Salary'] = pd.to_numeric(df['Salary'], errors = 'coerce', downcast = 'float')
如果要查看导致问题的行,因为pd.to_numeric将强制返回Nan。