簡體   English   中英

替換pandas數據幀中任何列的值

[英]Replace value in any column in pandas dataframe

在下面的數據框中:

 T2MN   T2MX   RH2M DFP2M RAIN 
 6.96   9.32  84.27  5.57    - 
 6.31  10.46  -      5.63    - 
  -    10.66  79.38  3.63    - 
 0.79   4.45  94.24  1.85    - 
 1.45   3.99  91.71  1.17    - 

如何用NaN替換所有- 我不想指定列名,因為我事先不知道哪個列會有-

只需replace()字符串:

In [10]: df.replace('-', 'NaN')
Out[10]: 
   T2MN   T2MX   RH2M  DFP2M RAIN
0  6.96   9.32  84.27   5.57  NaN
1  6.31  10.46    NaN   5.63  NaN
2   NaN  10.66  79.38   3.63  NaN
3  0.79   4.45  94.24   1.85  NaN
4  1.45   3.99  91.71   1.17  NaN

如果這些是字符串,那么你的花車可能也是字符串。

假設您的數據幀是df ,我會嘗試

pd.to_numeric(df.stack(), 'coerce').unstack()

更深入的解釋

熊貓通常不會用'-'代表丟失的花車。 因此, '-'必須是一個字符串。 因此,任何帶有'-'列的dtype必須是'object' 這使得很有可能無論解析數據,將浮點數保留為字符串。

設定

from io import StringIO
import pandas as pd

txt = """T2MN   T2MX   RH2M DFP2M RAIN 
 6.96   9.32  84.27  5.57    - 
 6.31  10.46  -      5.63    - 
  -    10.66  79.38  3.63    - 
 0.79   4.45  94.24  1.85    - 
 1.45   3.99  91.71  1.17    - """

df = pd.read_csv(StringIO(txt), delim_whitespace=True)
print(df)

   T2MN   T2MX   RH2M  DFP2M RAIN
0  6.96   9.32  84.27   5.57    -
1  6.31  10.46      -   5.63    -
2     -  10.66  79.38   3.63    -
3  0.79   4.45  94.24   1.85    -
4  1.45   3.99  91.71   1.17    -

什么是dtypes

print(df.dtypes)

T2MN      object
T2MX     float64
RH2M      object
DFP2M    float64
RAIN      object
dtype: object

第一個元素的類型是什么?

print(type(df.iloc[0, 0]))

<class 'str'>

這意味着任何帶有'-'的列就像一列看起來像浮點數的字符串。 你想用pd.to_numeric與參數errors='coerce'給力非數字項目np.nan 然而, pd.to_numeric不上一個操作pd.DataFrame所以我們stackunstack

pd.to_numeric(df.stack(), 'coerce').unstack()

   T2MN   T2MX   RH2M  DFP2M  RAIN
0  6.96   9.32  84.27   5.57   NaN
1  6.31  10.46    NaN   5.63   NaN
2   NaN  10.66  79.38   3.63   NaN
3  0.79   4.45  94.24   1.85   NaN
4  1.45   3.99  91.71   1.17   NaN

我想你想的實際numpy.nan而不是字符串NaN ,你可以用很多方法,如fillna / isnull / notnullpandas.Series / pandas.DataFrame

import pandas as pd

import numpy as np

df = pd.DataFrame([['-']*10]*10)

df = df.replace('-',np.nan)

看起來你正在從CSV / FWF文件中讀取這些數據...如果這是真的,擺脫'-'的最簡單方法就是解釋Pandas它是NaN的代表:

df = pd.read_csv(filename, na_values=['NaN', 'nan', '-'])

測試:

In [79]: df
Out[79]:
   T2MN   T2MX   RH2M  DFP2M  RAIN
0  6.96   9.32  84.27   5.57   NaN
1  6.31  10.46    NaN   5.63   NaN
2   NaN  10.66  79.38   3.63   NaN
3  0.79   4.45  94.24   1.85   NaN
4  1.45   3.99  91.71   1.17   NaN

In [80]: df.dtypes
Out[80]:
T2MN     float64
T2MX     float64
RH2M     float64
DFP2M    float64
RAIN     float64
dtype: object

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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