繁体   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