【发布时间】:2021-12-15 17:45:14
【问题描述】:
我想知道我们如何从数据框的所有列中填充 NaN,除了一些。 例如,我有一个包含 20 列的数据框,我想为除两列之外的所有列填充 NaN(在我的情况下,NaN 被平均值替换)。
df = df.drop(['col1','col2], 1).fillna(df.mean())
我试过这个,但我认为这不是实现这一目标的最佳方法(另外,我想避免 inplace=true arg)。
谢谢
【问题讨论】:
我想知道我们如何从数据框的所有列中填充 NaN,除了一些。 例如,我有一个包含 20 列的数据框,我想为除两列之外的所有列填充 NaN(在我的情况下,NaN 被平均值替换)。
df = df.drop(['col1','col2], 1).fillna(df.mean())
我试过这个,但我认为这不是实现这一目标的最佳方法(另外,我想避免 inplace=true arg)。
谢谢
【问题讨论】:
您可以选择在哪些列上使用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}}
【讨论】: