如何向以日期为索引的Pandas DataFrame追加行?
针对你这种用日期做索引的Pandas DataFrame,要追加新行其实很简单,调整一下方法就行,我给你几个实用的方案:
方案1:用
pd.concat追加(推荐,兼容性强) 这是最稳妥的方式,尤其是需要保证索引类型和原DataFrame一致的时候:
import pandas as pd # 定义要追加的新日期和对应值 new_date = pd.to_datetime('2011-10-29') new_entry = 19 # 构造单行的新DataFrame,索引设置为日期 new_row = pd.DataFrame({'entry': [new_entry]}, index=[new_date]) # 合并原DataFrame和新行 df = pd.concat([df, new_row])
这种方法不会破坏原DataFrame的结构,哪怕后续要追加多列或者多行都能轻松扩展。
方案2:直接用
loc赋值(单行追加更简洁) 如果只是加一行,用loc直接通过日期索引标签赋值更高效:
# 显式转换日期为datetime类型,确保和原索引匹配 df.loc[pd.to_datetime('2011-10-29')] = 19
⚠️ 注意:一定要确保新日期的类型和原索引一致(用df.index.dtype可以查看原索引类型),否则会把索引转为object类型,后续时间相关的操作会出问题。
方案3:批量追加多行
如果有好几行要加,可以先整理成数据列表,再转成DataFrame合并:
# 准备批量数据 new_rows_data = [ {'date': '2011-10-29', 'entry': 19}, {'date': '2011-10-30', 'entry': 20}, {'date': '2011-10-31', 'entry': 21} ] # 转成DataFrame并设置日期索引 new_df = pd.DataFrame(new_rows_data).set_index('date') # 统一索引类型为datetime new_df.index = pd.to_datetime(new_df.index) # 合并到原DataFrame df = pd.concat([df, new_df])
重要提醒
别再用df.append()方法了——Pandas已经把它标记为弃用(deprecated)了,官方明确推荐用pd.concat来替代,避免后续版本兼容性问题。
内容的提问来源于stack exchange,提问作者jtlz2
相关产品推荐
相关产品推荐

