[英]pandas.DataFrame set all string values to nan
我有一個包含string,float和int類型的pandas.DataFrame
。
有沒有辦法將所有無法轉換為浮點數的字符串設置為NaN
?
例如:
A B C D
0 1 2 5 7
1 0 4 NaN 15
2 4 8 9 10
3 11 5 8 0
4 11 5 8 "wajdi"
至:
A B C D
0 1 2 5 7
1 0 4 NaN 15
2 4 8 9 10
3 11 5 8 0
4 11 5 8 NaN
你可以使用pd.to_numeric
並設置errors='coerce'
df['D'] = pd.to_numeric(df.D, errors='coerce')
哪個會給你:
A B C D
0 1 2 5.0 7.0
1 0 4 NaN 15.0
2 4 8 9.0 10.0
3 11 5 8.0 0.0
4 11 5 8.0 NaN
不推薦使用的解決方案 (僅適用於pandas <= 0.20):
df.convert_objects(convert_numeric=True)
pandas.DataFrame.convert_objects
這是convert_objects
源代碼中的開發注釋: # TODO: Remove in 0.18 or 2017, which ever is sooner
。 因此,如果您使用它,請不要將其作為長期解決方案。
這是一種方式:
df['E'] = pd.to_numeric(df.D, errors='coerce')
然后你有:
A B C D E
0 1 2 5.0 7 7.0
1 0 4 NaN 15 15.0
2 4 8 9.0 10 10.0
3 11 5 8.0 0 0.0
4 11 5 8.0 wajdi NaN
您可以使用帶errors='coerce'
pd.to_numeric
。
In [30]: df = pd.DataFrame({'a': [1, 2, 'NaN', 'bob', 3.2]})
In [31]: pd.to_numeric(df.a, errors='coerce')
Out[31]:
0 1.0
1 2.0
2 NaN
3 NaN
4 3.2
Name: a, dtype: float64
以下是將其應用於所有列的一種方法:
for c in df.columns:
df[c] = pd.to_numeric(df[c], errors='coerce')
(請參閱NinjaPuppy的評論以獲得更好的方法。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.