【问题标题】:How to use apply for multiple Pandas dataset columns?如何使用申请多个 Pandas 数据集列?
【发布时间】:2020-10-02 16:10:16
【问题描述】:

我几乎不会尝试使用从先前列表中选择的 NaN 值填充某些列。代码将转到 else 路径,并且永远不会进行正确的修改...

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
                    'B': [0.0, np.nan, np.nan, 100],
                    'C': [20, 0.0002, 10000, np.nan],
                    'D': ['D0', 'D1', 'D2', 'D3']},
                   index=[0, 1, 2, 3])

num_cols = ['B', 'C']
fill_mean = lambda col: col.fillna(col.mean()) if col.name in num_cols else col
df2.apply(fill_mean, axis=1)

【问题讨论】:

  • 你能添加你的预期输出吗?
  • df1.fillna(df1.mean()) 将根据该列的平均值在列中填充 NA,因此您在这里并不需要 LC

标签: pandas apply multiple-columns


【解决方案1】:

你可以更简单地使用

df1.fillna(df1.mean())

这将通过列均值填充数字列的 nas:

    A   B   C   D
0   A0  0.0 20.000000   D0
1   A1  50.0    0.000200    D1
2   A2  50.0    10000.000000    D2
3   A3  100.0   3340.000067 D3

【讨论】:

    【解决方案2】:

    我不确定您想要的输出是否只是所有列(单行)的平均值。如果是这种情况,下面的解决方案可能会有所帮助。

    df = df1.select_dtypes(include='float').mean().to_frame().T
    df = pd.concat([df, df.reindex(columns = df1.select_dtypes(exclude='float').columns)], axis=1, sort=False)
    print(df)
         B            C   A   D
    0  50.0  3340.000067 NaN NaN
    

    【讨论】:

      猜你喜欢
      • 2021-07-19
      • 1970-01-01
      • 1970-01-01
      • 2021-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-13
      相关资源
      最近更新 更多