python - 如何将包含 "$ - , "字符的 Panda 字符串转换为 float

标签 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:无法将字符串转换为 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)

关于python - 如何将包含 "$ - , "字符的 Panda 字符串转换为 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60212482/

相关文章:

python - 即使使用 .loc 后也出现设置与复制警告错误

窗口顶部的Python Pandas滚动总和位值

python - 如何检查 django 模板中的 TEMPLATE_DEBUG 标志?

python - 显示没有时间的 Python 日期时间

python - 基于 Pandas 数据框中列值的顶部底部配对

python - 另一个 DataFrame 的两个不同日期之间满足特定条件的总行数的计数

python - 加入 pandas 系列字符串

python - 获取值是 Pandas 数据框中的值的列名

python - Python 中的自变形代码可能吗?

python - Plotly:如何显示边际直方图计数以外的其他值?