Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫-如何在数据帧系列中用零值替换字符串?_Python_Pandas_Dataframe - Fatal编程技术网

Python 熊猫-如何在数据帧系列中用零值替换字符串?

Python 熊猫-如何在数据帧系列中用零值替换字符串?,python,pandas,dataframe,Python,Pandas,Dataframe,我正在将一些csv数据导入Pandas数据框(在Python中)。一个系列意味着所有数值。但是,它还包含一些表示为字符串的伪“$-”元素。这些是以前的格式设置留下的。如果我只是导入该系列,Pandas会将其报告为一系列“对象” 用零替换这些“$-”字符串的最佳方法是什么?或者更一般地说,如何用数值替换序列中的所有字符串(主要是数字),并将序列转换为浮点类型 史蒂夫 使用Series.str.replace和Series.astype df = pd.Series(['2$-32$-4','12

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

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

  • 史蒂夫

使用
Series.str.replace
Series.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
您可以使用
DataFrame
的方法,使用
convert\u numeric=True
将字符串更改为
NaNs

从文档中:

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

最后,如果要将那些
nan
转换为
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

使用
.to_numeric
将字符串转换为numeric(使用错误选项“强制”将字符串设置为
NaN

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

df.replace('NaN',0)

注意,
pd.to_numeric
是新的热度<代码>转换对象已被弃用。啊,谢谢。我没有升级到
0.17
,因此该选项不在我的
pandas
中。我将更新我的答案…@DSM它似乎只对1D对象有效,所以转换
数据帧
更复杂。。。还是我遗漏了什么?谢谢-但我的数据似乎有点污染。它适用于一个系列,但不适用于另一个系列。使其跳闸的序列包含
“$-”
“($24)”
值。在
pd.to_numeric
之后,它仍然显示为对象类型谢谢-这几乎可以工作,但会在
“($24)”
值上出错。如果您只想留下数字,可以使用
df.str.replace(r'[^0-9]+','')
谢谢-但是如何将括号解析为负数,即
“$(24)”
-24
?您的意思是可以有单独的负数吗?你能发布一个数据示例吗?嗨@hellpanderrr我在这里发布了一个更一般的问题:哪个有解决方案?谢谢!我已经发布了关于处理会计格式数据的更一般的问题。看这里
df = pd.to_numeric(df, errors='coerce')
df.replace('NaN',0)