簡體   English   中英

替換熊貓數據框中的問號

[英]Replace question mark in pandas dataframe

從像 csv 文件這樣的來源讀取數據幀時,像 '?' 這樣的文字顯示為熊貓中的空白值。 在此處輸入圖片說明

如果這是一個數字列並且您嘗試用平均值替換df['weight'].replace('?',df['weight'].mean() ,inplace='True')如果它是鍵入“對象”而不是 int64。

在這種情況下,我會替換這些“?” 使用 NaN 因為 isna() 不能直接對它們起作用。 然后將這些 NaN 替換為 0,最后使用它們替換為要估算的實際值

df['SGOT'].replace('?',np.nan,inplace='True' )
df1['SGOT'].fillna(value=0,inplace=True)

df1['SGOT']=df1['SGOT'].astype(int)
df1['SGOT'].replace(0,df1['SGOT'].mean(),inplace=True )

我相信有更好的方法來做到這一點。 請告訴我

您可以將 dict 作為參數發送到df.replace() ,其中該 dict 將包含列名稱以及要替換的值和新值。 對於列的平均值,您可以將參數errors指定為True 這是解釋的代碼:

import pandas as pd
df = pd.DataFrame({'BILIRUBIN': [1, '?', 1, 0.4, 0.7], 
                   'SGOT':[18, '?','?',18, 18], 
                   'ALK_PHOSPHATE':[85, '?', '?', 45, 71]})

replace_dict = {'SGOT': {'?': pd.to_numeric(df.SGOT, errors='coerce').mean()}, 
                'BILIRUBIN':{'?': pd.to_numeric(df.BILIRUBIN, errors='coerce').mean()}, 
                'ALK_PHOSPHATE':{'?': pd.to_numeric(df.ALK_PHOSPHATE, errors='coerce').mean()}}

df.replace(replace_dict, inplace=True)

>>> df
   BILIRUBIN  SGOT  ALK_PHOSPHATE
0      1.000  18.0           85.0
1      0.775  18.0           67.0
2      1.000  18.0           67.0
3      0.400  18.0           45.0
4      0.700  18.0           71.0

當您讀取數據時(大概是使用pd.read_csv() )是替換'?'的好時機'?' nan

df = pd.read_csv(..., na_values='?')

請參閱文檔 na_values也可以是列表或字典。

默認情況下,這將添加'?' 到要解釋為 NaN 的字符串列表(如果您願意,可以使用keep_default_na=False更改它)。

暫無
暫無

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

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