如何将包含“ $-”字符的熊猫字符串转换为浮点型

时间:2020-02-13 16:26:36

标签: python pandas dataframe

我有一个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:。似乎是-引起了一些问题,因此是否有一种优雅的处理方法?

2 个答案:

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