![](/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.