pandas 在dataframe中填充除一列(不删除它)之外的所有列上的NaN值

66bbxpm5  于 2023-06-28  发布在  其他
关注(0)|答案(3)|浏览(134)

我想填补NaN值与“不可用”字符串的所有列在我的dataframe除了一列(即命名为“滞后”)
我试过这个:

#fill NaN values with "Not Available" except in "lag" column
mydataset_df[mydataset_df.columns.difference(['lag'])].fillna("Not Available", inplace = True)

还有这个

mydataset_df.loc[ : , mydataset_df.columns != 'lag'].fillna("Not Available", inplace = True)

我得到的是同样的结果:当为空时,没有列填充“不可用”。但如果我执行:

mydataset.fillna("Not Available", inplace = True)

我得到df中的所有空白值都正确地填充了“不可用”(所以我猜这里的问题是当我选择需要应用命令的列时代码字符串中的第一部分)
有人能帮帮我吗?我不想删除“滞后”列,我只想留下它,并填写所有其他列,如果有空白。
先谢谢你了
斯特凡诺

g6baxovj

g6baxovj1#

使用poppd.concat

poplag列,并在其他列中用Not Available填充NAN。最后,合并2。

df = pd.concat([df.pop('lag'), df.fillna('Not Available')], axis=1)
col17t5w

col17t5w2#

你可以试试这个

for col in mydataset_df.columns:
    if col != 'lag':
        mydataset_df[col].fillna("Not Available", inplace=True)
wgx48brx

wgx48brx3#

第一次尝试显示一个提示:著名的“A value is trying to be set on a copy of a slice from a DataFrame”。这是Pandas的一个棘手的部分,它试图告诉你你不是在处理数据框本身。
在这种情况下,省略inplace会更清楚:

mydataset_df = pd.DataFrame({'lag': [1, 2, 3, pd.NA], 'foo': [2, 4, pd.NA, 8]})
print(mydataset_df[mydataset_df.columns.difference(['lag'])].fillna("Not Available"))

             foo
0              2
1              4
2  Not Available
3              8

fillna没有传递整个 Dataframe ,只传递了对列的引用。这里有详细的解释:https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy。简而言之,结果是“不可预测的”...肯定很困惑
使用相同的想法,但为了安全起见,您可以将dataframe中的列替换为:

mydataset_df[mydataset_df.columns.difference(['lag'])] = mydataset_df[mydataset_df.columns.difference(['lag'])].fillna("Not Available")

相关问题