![](/img/trans.png)
[英]Drop rows with a 'question mark' value in any column in a pandas dataframe
[英]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.