python - 针对特定列的逐行填充?

标签 python pandas missing-data

我有以下 pandas 数据框,我想用 D 列中的值按行方式填充 A-C 列中的 NaN。是否有明确的方法来执行此操作,我可以定义所有 NaN 应该依赖按行显示 D 列中的值?我找不到在 fillna() 中明确执行此操作的方法。

请注意,还有其他E-Z 列,它们有自己的 NaN,并且可能有其他填充 NaN 的规则,应该保持不变

A        B        C        D       E
158      158      158      177     ...  
158      158      158      177     ...
NaN      NaN      NaN      177     ...   
158      158      158      177     ...
NaN      NaN      NaN      177     ...  

只想将此用于 A-C 列:

A        B        C        D       E
158      158      158      177     ...  
158      158      158      177     ...
177      177      177      177     ...   
158      158      158      177     ...
177      177      177      177     ...  

谢谢。

最佳答案

使用fillna函数:

df.fillna(axis=1, method='backfill')

将在其他列中没有 NaN 的情况下执行。
如果有并且你想保持它们不变,我认为这种方式的唯一选择是在你的数据帧的一个子集上执行 fillna 。使用示例数据框:

In [45]: df
Out[45]: 
     A    B    C    D   E   F
0  158  158  158  177   1  10
1  158  158  158  177   2  20
2  NaN  NaN  NaN  177   3  30
3  158  158  158  177 NaN  40
4  NaN  NaN  NaN  177   5  50

In [48]: df[['A', 'B', 'C', 'D']] = df[['A', 'B', 'C', 'D']].fillna(axis=1, method='backfill')

In [49]: df
Out[49]: 
     A    B    C    D   E   F
0  158  158  158  177   1  10
1  158  158  158  177   2  20
2  177  177  177  177   3  30
3  158  158  158  177 NaN  40
4  177  177  177  177   5  50

更新:如果您不想依赖列顺序,您还可以指定用于填充每一行的值(如 .fillna(value=df[ 'D'])。唯一的问题是这仅适用于系列(当它是数据框时,它会尝试映射不同的值以填充到不同的列,而不是行)。所以应用逐列进行,它有效:

In [60]: df[['A', 'B', 'C']].apply(lambda x: x.fillna(value=df['D']))
Out[60]: 
     A    B    C
0  158  158  158
1  158  158  158
2  177  177  177
3  158  158  158
4  177  177  177

关于python - 针对特定列的逐行填充?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24015379/

相关文章:

python - 有条件地替换 Pandas 数据框中的空白值

python - 如果字段为 None,Django 模型字段如何采用默认值

python - 无法加入 Pandas 中的数据框

python - Pandas 数据框条件 .mean() 取决于特定列中的值

python - 为什么 pandas str.replace 返回 NaN?

pandas - 'NaTType' 对象没有属性 'days'

python - 用之前的非缺失值填充缺失的 pandas 数据,按键分组

python - 不使用 PyCurl 的类似 Curl 的客户端证书发送 : how?

python - 我想使用 %timeit,但不知道该怎么做

python - 是否有与 Linux/Unix "fold"命令等效的 Vim?