You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas DataFrame顶部添加带日期字段的新行并解决日期丢失问题

问题:在Pandas DataFrame顶部添加新行后原有日期字段变为NaN

尝试在已有Pandas DataFrame顶部添加新行,使用pd.concat拼接后,原有行的日期字段全部显示为NaN。操作步骤如下:

  1. 读取CSV文件:
import pandas as pd
loro = pd.read_csv('path to csv file', delimiter=';')
  1. 转换日期格式并设置索引:
loro['DATE']=pd.to_datetime(loro['DATE'])
cols = ['N1','N2','N3','N4','N5','E1','E2']
loro.set_index('DATE',inplace=True)
loto = loro[cols].copy()
loto.head()

此时输出的DataFrame:

N1  N2  N3  N4  N5  E1  E2
DATE                              
2023-10-17  10  17  20  35  40  3   4
2023-10-13  21  26  28  40  41  2   4
2023-10-10  18  20  22  33  43  3   9
2023-10-06  21  29  31  34  43  2   9
2023-10-03  6   20  22  24  45  4   5
  1. 创建新行并拼接:
new_row = pd.DataFrame({'DATE':'2023-10-20'}, index =[0])
loto = pd.concat([new_row, loto]).reset_index(drop = True)
loto.head(5)

拼接后结果:

DATE    N1    N2    N3    N4    N5    E1    E2
0 2023-10-20   NaN   NaN   NaN   NaN   NaN   NaN   NaN
1        NaN  10.0  17.0  20.0  35.0  40.0   3.0   4.0
2        NaN  21.0  26.0  28.0  40.0  41.0   2.0   4.0
3        NaN  18.0  20.0  22.0  33.0  43.0   3.0   9.0
4        NaN  21.0  29.0  31.0  34.0  43.0   2.0   9.0

期望添加新行后不影响原有行的日期字段,求正确操作方法。


解决方案

原因分析

你的loto DataFrame已经将DATE设置为索引,而非普通列。拼接时new_row包含DATE列,但原有数据的DATE只存在于索引中,reset_index(drop=True)又直接丢弃了原有索引,导致原有行的DATE列没有值,全部显示为NaN。

方法一:先将索引转为列,再拼接

先把loto的索引恢复成普通列,再和新行拼接,最后可选重新设置索引:

# 将DATE索引转为普通列
loto_reset = loto.reset_index()

# 创建包含完整字段的新行(缺失字段设为NaN或对应值)
new_row = pd.DataFrame({
    'DATE': pd.to_datetime('2023-10-20'),
    'N1': None, 'N2': None, 'N3': None, 'N4': None, 'N5': None,
    'E1': None, 'E2': None
}, index=[0])

# 拼接并重置索引
loto_updated = pd.concat([new_row, loto_reset], ignore_index=True)

# 可选:重新将DATE设为索引
loto_updated.set_index('DATE', inplace=True)
loto_updated.head()

方法二:保持索引一致,拼接后再处理

创建新行时将DATE作为索引,和原DataFrame结构一致后再拼接,最后按需重置索引:

# 创建新行,DATE作为索引,其他字段设为NaN或对应值
new_row = pd.DataFrame(
    [[None, None, None, None, None, None, None]],
    index=pd.to_datetime(['2023-10-20']),
    columns=['N1','N2','N3','N4','N5','E1','E2']
)

# 拼接两个DataFrame(索引一致)
loto_updated = pd.concat([new_row, loto])

# 可选:重置索引并保留DATE列
loto_updated = loto_updated.reset_index().rename(columns={'index': 'DATE'})
loto_updated.head()

注意事项

  • 新行的字段要和原DataFrame完全匹配,避免拼接后出现列缺失或多余
  • 如果新行有具体数值,替换None为对应值即可

内容的提问来源于stack exchange,提问作者Jackie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 04:25:41