Pandas中DataFrame指定列空值填充问题求助
Pandas中DataFrame指定列空值填充问题求助
你好呀,我来帮你搞定这个空值填充的问题~ 先理清楚你的需求:当Column_2是空值时,要用该位置之后Column_1的第一个非空值来填充,对吧?
首先得指出你原来代码里的几个问题:
- 列名拼写错误:你写的
Colunmn_2多了一个u,应该是Column_2,这会直接导致找不到列的报错 - 对
ffill()的用法理解错啦:ffill()是向前填充(用前面的非空值补当前空值),而且它根本不接受你传的那种参数,所以报错是必然的
那正确的做法其实很清晰:
- 先给
Column_1做向后填充(bfill),这样每个位置的值就变成了该位置及之后第一个非空的Column_1值 - 用这个处理后的系列,去填补
Column_2里的空值
直接上可用的代码,你可以复制试试:
# 先对Column_1做向后填充,得到每个位置对应的后续第一个非空值 col1_next_valid = df['Column_1'].bfill() # 用这个结果填充Column_2的空值 df['Column_2'] = df['Column_2'].fillna(col1_next_valid)
我还给你写了完整的测试代码,你可以直接运行验证效果:
import pandas as pd import numpy as np # 构造和你示例一致的测试数据 df = pd.DataFrame({ 'Column_1': ['F', None, None, 'G', None, None, 'H'], 'Column_2': ['A', 'B', None, 'C', None, 'D', 'D'] }) # 执行填充操作 col1_next_valid = df['Column_1'].bfill() df['Column_2'] = df['Column_2'].fillna(col1_next_valid) # 打印结果 print(df)
运行后输出的结果完全符合你的预期:
Column_1 Column_2 0 F A 1 None B 2 None G 3 G C 4 None H 5 None D 6 H D
简单说下原理:bfill()方法会自动帮你定位每个位置之后第一个非空的Column_1值,而fillna()只会替换Column_2里的空值,不会改动已经有值的部分,完美匹配你的需求~
备注:内容来源于stack exchange,提问作者Rodel Silvano
相关产品推荐
相关产品推荐

