【问题标题】:Drop only cell values in Pandas where value is NAN仅删除 Pandas 中值为 NAN 的单元格值
【发布时间】:2021-11-14 16:16:20
【问题描述】:

我有一个包含多列的数据框。许多单元格都有我想要删除的 NaN 值,但只有那个单元格,而不是整个行,甚至只是那个单元格的列。 DataFrame 看起来像这样

Column1 | Column2 | Column3 | ... |ColumnX
1       | NaN     | NaN     | ....| NaN
2       | NaN     | NaN     | ....| NaN
.
.
.
12       | 1      | NaN     | ....| NaN
13       | 2      | NaN     | ....| NaN
.
.
.
21       | 11     | 1        | ....| NaN
22       | 12     | 2        | ....| NaN

等等。

最终的输出应该是这样的

Column1 | Column2 | Column3  | ... |ColumnX
    1       | 1    | 1       | ... | 1
    2       | 2    | 2       | ... | 2
    .
    .
    .
    12       | 12  | 11      | ....| 11
    13       | 13  | 12      | ....| 12
    .
    .
    .
    21       | 21  | 21      | ....| 21
    22       | 22  | 22      | ....| 22

知道这是否可以实现吗?

【问题讨论】:

标签: python pandas


【解决方案1】:

从您的预期输出来看,您确实希望在每一列中“计算”NaNs,并用它们的出现次数替换它们。

实现此目的的快速方法如下:

  • 你定义一个函数来做你需要的替换

    import pandas as pd
    import numpy as np
    
    def sub(x):
        mask = [i for i,y in enumerate(x) if np.isnan(y)]
        x[mask] = [x + 1 for x range(len(mask))] # apply ANY transformation you need to x
        return x
    
  • 您将其应用于每一列(让我们先定义一个简单的数据框):

    dt = pd.DataFrame({"col1":[1,2,3], "col2":[np.nan, np.nan, 1], "col3":[1,np.nan,2]})
    
    dt.apply(sub)
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-28
    • 2015-03-01
    • 2020-07-28
    • 2014-09-28
    • 2017-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多