如何用Python填充DataFrame中Site列的NaN值为前一个有效站点字符串
解决DataFrame中Site列的NaN前向填充问题
嘿,这个场景我太熟悉了!用pandas的fillna方法搭配method='ffill'就能完美解决,完全不需要复杂的循环,而且效率超高,哪怕是超大的DataFrame也能轻松处理。
核心解决方案
直接对Site列执行前向填充操作就行,一行代码搞定:
df['Site'] = df['Site'].fillna(method='ffill')
具体示例验证
我们用你给出的示例数据来测试一下:
import pandas as pd import numpy as np # 构造你的示例DataFrame df = pd.DataFrame({ 'Site': ['aa', np.nan, np.nan, 'bb', np.nan, 'cc', np.nan, np.nan, np.nan], 'data1': [2, 5, 2, 5, 2, 5, 2, 2, 2], 'data2': [3, 6, 3, 6, 3, 6, 3, 3, 3] }) # 执行填充 df['Site'] = df['Site'].fillna(method='ffill') # 查看结果 print(df)
运行后输出的结果就是你想要的:
Site data1 data2 0 aa 2 3 1 aa 5 6 2 aa 2 3 3 bb 5 6 4 bb 2 3 5 cc 5 6 6 cc 2 3 7 cc 2 3 8 cc 2 3
额外说明
ffill是forward fill的缩写,作用就是把每一个NaN替换成它前面最近的非空值,完全匹配你的需求- 这个操作只会修改
Site列,其他列的数据会原封不动保留 - 如果你的DataFrame开头就有NaN(比如第一个站点标识缺失),可以先手动填充开头的值,或者搭配
limit参数限制填充次数,不过你的示例里没有这种情况,暂时不用考虑
内容的提问来源于stack exchange,提问作者jcat
相关产品推荐
相关产品推荐

