Pandas - 如何在DataFrame系列中用零值替换字符串?

时间:2015-10-30 16:04:25

标签: python pandas dataframe

我正在将一些csv数据导入Pandas DataFrame(在Python中)。一个系列意味着所有数值。但是,它还包含一些虚假的“$ - ”元素,表示为字符串。这些都是以前的格式化遗留下来的。如果我只是导入该系列,Pandas会将其报告为一系列“对象”。

用零替换这些“$ - ”字符串的最佳方法是什么?或者更一般地说,如何用数值替换系列中的所有字符串(主要是数字),并将系列转换为浮点类型?

  • 史蒂夫

3 个答案:

答案 0 :(得分:8)

您可以使用DataFrame的{​​{3}}方法,convert_numeric=True将字符串更改为NaNs

来自文档:

  

<强> convert_numeric :   如果为True,则尝试强制转换为数字(包括字符串),不可转换的值变为NaN。

In [17]: df
Out[17]: 
    a   b  c
0  1.  2.  4
1  sd  2.  4
2  1.  fg  5

In [18]: df2 = df.convert_objects(convert_numeric=True)

In [19]: df2
Out[19]: 
    a   b  c
0   1   2  4
1 NaN   2  4
2   1 NaN  5

最后,如果您想将NaNs转换为0,您可以使用df.replace

In [20]: df2.replace('NaN',0)
Out[20]: 
   a  b  c
0  1  2  4
1  0  2  4
2  1  0  5

答案 1 :(得分:0)

使用Series.str.replaceSeries.astype

df = pd.Series(['2$-32$-4','123$-12','00123','44'])

df.str.replace(r'\$-','0').astype(float)

0    203204
1    123012
2       123
3        44
dtype: float64

答案 2 :(得分:0)

使用 .to_numeric 将字符串转换为数字(使用错误选项 'coerce' 将字符串设置为 NaN):

df = pd.to_numeric(df, errors='coerce')

然后使用替换将 NaN 值转换为零:

df.replace('NaN',0)