我有一个如下的数据帧
df = pd.DataFrame({'A': [1, 2, 3], 'B': [1.45, 2.33, np.nan], 'C': [4, 5, 6], 'D': [4.55, 7.36, np.nan]})
我想以通用方式替换缺少的值,即np.nan
。为此,我创建了一个函数,如下所示
def treat_mis_value_nu(df):
df_nu = df.select_dtypes(include=['number'])
lst_null_col = df_nu.columns[df_nu.isnull().any()].tolist()
if len(lst_null_col)>0:
for i in lst_null_col:
if df_nu[i].isnull().sum()/len(df_nu[i])>0.10:
df_final_nu = df_nu.drop([i],axis=1)
else:
df_final_nu = df_nu[i].fillna(df_nu[i].median(),inplace=True)
return df_final_nu
当我应用这个函数时,如下所示
df_final = treat_mis_value_nu(df)
我得到的数据帧如下
A B C
0 1 1.0 4
1 2 2.0 5
2 3 NaN 6
因此,它实际上正确地删除了列D
,但未能删除列B
。我知道过去有关于这个话题的讨论(这里)。我还是可能错过了什么?
我建议看一下sklearn输入转换器。我不认为它可以删除列,但它可以用一种“通用方式”明确地填充它们——例如,用相关列的中位数填充缺少的值。
您可以这样使用它:
from sklearn.preprocessing import Imputer
imputer = Imputer(strategy='median')
num_df = df.values
names = df.columns.values
df_final = pd.DataFrame(imputer.transform(num_df), columns=names)
如果您有额外的转换,您可以考虑制作转换管道,甚至可以制作自己的变压器来完成定制任务。
使用:
df = pd.DataFrame({'A': [1, 2, 3,5,7], 'B': [1.45, 2.33, np.nan, np.nan, np.nan],
'C': [4, 5, 6,8,7], 'D': [4.55, 7.36, np.nan,9,10],
'E':list('abcde')})
print (df)
A B C D E
0 1 1.45 4 4.55 a
1 2 2.33 5 7.36 b
2 3 NaN 6 NaN c
3 5 NaN 8 9.00 d
4 7 NaN 7 10.00 e
def treat_mis_value_nu(df):
#get only numeric columns to dataframe
df_nu = df.select_dtypes(include=['number'])
#get only columns with NaNs
df_nu = df_nu.loc[:, df_nu.isnull().any()]
#get columns for remove with mean instead sum/len, it is same
cols_to_drop = df_nu.columns[df_nu.isnull().mean() <= 0.30]
#replace missing values of original columns and remove above thresh
return df.fillna(df_nu.median()).drop(cols_to_drop, axis=1)
print (treat_mis_value_nu(df))
A C D E
0 1 4 4.55 a
1 2 5 7.36 b
2 3 6 8.18 c
3 5 8 9.00 d
4 7 7 10.00 e
我有一个数据集,包含一系列国家和年份的几个指标的值(3072,1134行和列),但有些NaN。 下面是数据集的示例: 我想根据提交的
我有一个85列的大数据框。丢失的数据已编码为。我的目标是获得每列中缺少的数据量。所以我写了一个for循环来创建一个列表来获取金额。但它不起作用。 以下是我的代码: 我尝试使用循环中的代码,通过将更改为某一列的名称,来生成该列缺少的值的数量,然后代码运行并给出该列缺少的数据的数量。 因此,我不知道如何更正for循环代码。有人能帮我吗?我非常感谢你的帮助。
问题内容: 我有一个列表,我想用condition()返回True的None替换值。 例如,如果条件检查bool(item%2)应该返回: 最有效的方法是什么? 问题答案: 使用列表理解来构建新列表: 您可以根据需要修改原始列表,但实际上并不能节省时间: 以下是(Python 3.6.3)演示非节省时间的时间: 和Python 2.7.6计时:
问题内容: 就像这样说: http://web.archive.org/web/20090624083829/http://mail.python.org/pipermail/python- list/2003-May/206149.html Python中不存在函数重载。 就我而言,这也是一种面向对象的语言,因此对我来说是一个很大的障碍。最初,我发现无法区分参数类型很困难,但是Python的动态
我的数据帧中有一个值列表,我想用空字符串替换NaN值。 到目前为止,我所尝试的都不起作用:
我一直在尝试通过FieldMailMerge和VariableReplace示例,但似乎无法运行本地测试用例。我基本上试图从一个docx模板文档开始,并让它从一个模板创建x个docx文档,替换变量。 在下面的代码中,试图替换单个变量,但失败了。模板文件中的${}值作为处理的一部分被移除,因此我认为它正在查找它们,而不是出于某种原因替换它们。我明白这可能是由于格式问题,正如示例代码的注释中所解释的那