我正在将一些csv数据导入到Pandas DataFrame中(用Python)。一个系列是指所有的数值。然而,它也包含一些虚假的"$-“元素,表示为字符串。这些都是从以前的格式中遗留下来的。如果我只是导入该系列,Pandas将其报告为一系列的“object”。
用零替换这些"$-“字符串的最佳方法是什么?或者更广泛地说,我如何用数值替换一个系列(主要是数字)中的所有字符串,并将序列转换为浮点类型?
发布于 2015-10-30 16:13:50
使用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发布于 2015-10-30 16:15:17
您可以使用DataFrame的DataFrame方法,通过convert_numeric=True将字符串更改为NaNs
从医生那里:
convert_numeric:如果是真的话,尝试强迫数字(包括字符串),不可转换的值变成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发布于 2021-01-31 09:21:28
使用.to_numeric将字符串转换为数字(使用错误选项‘胁迫’将字符串设置为NaN ):
df = pd.to_numeric(df, errors='coerce')然后使用替换将NaN值转换为零:
df.replace('NaN',0)https://stackoverflow.com/questions/33440234
复制相似问题