如何将包含" $ - , "字符的熊猫字符串转换为浮点数



我有一个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:.似乎-引起了一些问题,那么有没有一种优雅的处理方式呢?

我会使用一个普通的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)

尝试:

df['Salary'] = df['Salary'].str.replace(',', '').str.replace('$', '').str.replace('-', '0').astype(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。

最新更新