使用Pandas向DataFrame追加缺失值对应的字典行数据
解决方案:向DataFrame追加缺失行数据
原始数据
ID Date type energy AA Q1 2022 a 1 AA Q2 2022 ok 1 AA Q3 2022 yes 1 AA Q4 2022 yes 4 FC Q1 2022 no 4 FC Q2 2022 no 4 FC Q3 2022 yes 45 FC Q4 2022 yes 5
期望结果
ID Date type energy AA Q1 2022 a 1 AA Q2 2022 ok 1 AA Q3 2022 yes 1 AA Q4 2022 yes 4 FC Q1 2022 no 4 FC Q2 2022 no 4 FC Q3 2022 yes 45 FC Q4 2022 yes 5 BC Q1 2022 0 DA Q1 2022 0
问题分析
你之前的merge代码逻辑错误,merge(df, df)只是重复合并原数据,没有正确构造要追加的行数据。要实现需求,核心是先构造包含缺失行的新DataFrame,再和原数据纵向合并。
正确代码实现
import pandas as pd # 初始化原DataFrame data = [ ["AA", "Q1 2022", "a", 1], ["AA", "Q2 2022", "ok", 1], ["AA", "Q3 2022", "yes", 1], ["AA", "Q4 2022", "yes", 4], ["FC", "Q1 2022", "no", 4], ["FC", "Q2 2022", "no", 4], ["FC", "Q3 2022", "yes", 45], ["FC", "Q4 2022", "yes", 5], ] df = pd.DataFrame(data, columns=["ID", "Date", "type", "energy"]) # 定义需要追加的行字典(你的原始字典) values = {'BC': 'Q1 2022', 'DA': 'Q1 2022'} # 把字典转换成符合列结构的行数据 missing_rows = [[id, date, "", 0] for id, date in values.items()] # 构造缺失行的DataFrame,列名和原数据保持一致 missing_df = pd.DataFrame(missing_rows, columns=df.columns) # 纵向合并原数据和缺失行,重置索引避免重复 result_df = pd.concat([df, missing_df], ignore_index=True) print(result_df)
代码说明
- 字典转行数据:用列表推导式快速把你的
values字典转换成符合原DataFrame列结构的行,自动填充type为空字符串、energy为0。 - 纵向合并:
pd.concat是专门用来合并多个DataFrame的工具,ignore_index=True会重置合并后的索引,避免出现重复索引问题。 - 直接赋值默认值:在构造缺失行时直接指定默认值,比合并后再用
fillna更高效直观。
内容的提问来源于stack exchange,提问作者Lynn
相关产品推荐
相关产品推荐

