簡體   English   中英

pandas.DataFrame將所有字符串值設置為nan

[英]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'

pandas.to_numeric

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM