【问题标题】:Pandas : Fillna for all columns, except twoPandas:所有列的填充,除了两个
【发布时间】:2021-12-15 17:45:14
【问题描述】:

我想知道我们如何从数据框的所有列中填充 NaN,除了一些。 例如,我有一个包含 20 列的数据框,我想为除两列之外的所有列填充 NaN(在我的情况下,NaN 被平均值替换)。

df = df.drop(['col1','col2], 1).fillna(df.mean())

我试过这个,但我认为这不是实现这一目标的最佳方法(另外,我想避免 inplace=true arg)。

谢谢

【问题讨论】:

标签: python pandas dataframe


【解决方案1】:

您可以选择在哪些列上使用fillna。假设您有 20 列,并且您想要填充除 'col1' 和 'col2' 之外的所有列,您可以创建一个包含要填充的列表:

f = [c for c in df.columns if c not in ['col1','col2']]
df[f] = df[f].fillna(df[f].mean())

print(df)

   col1  col2      col3  col4  ...     col17  col18     col19  col20
0   1.0   1.0  1.000000   1.0  ...  1.000000      1  1.000000      1
1   NaN   NaN  2.666667   2.0  ...  2.000000      2  2.000000      2
2   NaN   3.0  3.000000   1.5  ...  2.333333      3  2.333333      3
3   4.0   4.0  4.000000   1.5  ...  4.000000      4  4.000000      4

              (2.66666) was the mean

# Initial DF:

{'col1': {0: 1.0, 1: nan, 2: nan, 3: 4.0},
 'col2': {0: 1.0, 1: nan, 2: 3.0, 3: 4.0},
 'col3': {0: 1.0, 1: nan, 2: 3.0, 3: 4.0},
 'col4': {0: 1.0, 1: 2.0, 2: nan, 3: nan},
 'col5': {0: 1.0, 1: nan, 2: 3.0, 3: 4.0},
 'col6': {0: 1, 1: 2, 2: 3, 3: 4},
 'col7': {0: nan, 1: 2.0, 2: 3.0, 3: 4.0},
 'col8': {0: 1.0, 1: 2.0, 2: nan, 3: 4.0},
 'col9': {0: 1, 1: 2, 2: 3, 3: 4},
 'col10': {0: 1.0, 1: 2.0, 2: nan, 3: 4.0},
 'col11': {0: 1.0, 1: nan, 2: 3.0, 3: 4.0},
 'col12': {0: 1, 1: 2, 2: 3, 3: 4},
 'col13': {0: 1.0, 1: 2.0, 2: nan, 3: 4.0},
 'col14': {0: 1.0, 1: nan, 2: 3.0, 3: 4.0},
 'col15': {0: 1, 1: 2, 2: 3, 3: 4},
 'col16': {0: 1.0, 1: nan, 2: 3.0, 3: nan},
 'col17': {0: 1.0, 1: 2.0, 2: nan, 3: 4.0},
 'col18': {0: 1, 1: 2, 2: 3, 3: 4},
 'col19': {0: 1.0, 1: 2.0, 2: nan, 3: 4.0},
 'col20': {0: 1, 1: 2, 2: 3, 3: 4}}

【讨论】:

  • 比将 cols 放到另一个 df 中连接它们要好得多,也更安全,...非常感谢您的回答 :)
猜你喜欢
  • 2017-06-15
  • 1970-01-01
  • 1970-01-01
  • 2018-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-12
  • 1970-01-01
相关资源
最近更新 更多