【发布时间】:2020-02-19 00:33:40
【问题描述】:
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.str.replace.html
我有一列格式化为字符串的值,其中一些包含逗号,例如:
0 20,7
1 22
2 21
3 20
4 24,4
5 23,8
6 23,6
7 21,6
8 24,3
9 23,3
10 24,2
....
17053 16
17054 16
17055 15
17056 15
17057 19
17058 17
17059 18
17060 19
17061 20
17062 21
17063 20
我想将它们转换为浮点数。
现在,我不能直接应用 astype 或 to_numeric 方法,否则不会解释为“20,7”的字符串。
奇怪的是,如果将.str.replace(',', '.') 应用于不包含该模式的字符串,则正则表达式会失败,并返回 NaN。如果找到模式,我会期待替换,否则返回原样。
我也尝试了.str.replace(',', '.', regex = False),但没有成功。
例子:
对于像“20,7”这样的值,用逗号替换点可以正常工作,然后我可以转换为数字,得到一个浮点数 20.7。
但我也有这些价值观:
test['TMEDIA °C'][-10:]
17054 16
17055 15
17056 15
17057 19
17058 17
17059 18
17060 19
17061 20
17062 21
17063 20
并应用 str.replace 我明白了:
test['TMEDIA °C'][-10:].str.replace(',', '.')
17054 NaN
17055 NaN
17056 NaN
17057 NaN
17058 NaN
17059 NaN
17060 NaN
17061 NaN
17062 NaN
17063 NaN
并且不能将 astype 应用于整个列,而是我想得到这个:
test['TMEDIA °C'][-10:].astype(float)
17054 16.0
17055 15.0
17056 15.0
17057 19.0
17058 17.0
17059 18.0
17060 19.0
17061 20.0
17062 21.0
17063 20.0
这是 str.replace() 的错误,还是如果正则表达式失败,我如何保持当前值?
【问题讨论】:
-
不,无论如何它都会失败,无法将字符串转换为浮点数。我的问题的解决方案是
test['TMEDIA °C'].apply(lambda x : str(x).replace(',','.')).astype(float),但我正在等待将其发布为答案,因为我希望更好地了解 pandas 的 srt.replace 方法是否也可以让结果找到。 -
1)
str.replace(',', '.')在我的系统上运行良好(pandas 0.25)。 2)你也许可以用pd.read_csv(thousands=',')解决你的问题。 -
@QuangHoang “工作正常”是指不包含逗号的值被保留(你没有得到 NaN)?
-
这正是我的意思。请参阅live code。
标签: python regex pandas replace