将具有日期时间索引的行插入数据框

Posted

技术标签:

【中文标题】将具有日期时间索引的行插入数据框【英文标题】:insert row with datetime index to dataframe 【发布时间】:2018-11-23 05:52:10 【问题描述】:

我有一个带有日期时间索引的数据框:

time                count  day hour  minute  label
2018-06-07 00:25:00 207    7.0 0.0   25.0    177.0
2018-06-07 00:55:00 187    7.0 0.0   55.0    150.0
2018-06-07 01:25:00 194    7.0 1.0   25.0    165.0
2018-06-07 01:55:00 176    7.0 1.0   55.0    175.0
2018-06-07 02:25:00 195    7.0 2.0   25.0    172.0
-> add new datetime record record here 

我正在尝试添加一些新记录,但我得到了:

[DatetimeIndex(['2018-06-07 01:55:00'], dtype='datetime64[ns]', name='time', freq=None)] not an index
# this happen even if row exists or not

我只想添加一个30分钟的间隔记录,我的代码是这样的

last_date = recent_posts.iloc[[-1]].index
last_date = last_date + timedelta(minutes=30)

recent_posts.iloc[[last_date]] = # bla #bla

# What I may be doing wrong?

【问题讨论】:

您正在寻找不在数据框中的last_date DatetimeIndex。 是的!当“recent_posts.iloc[[-1]].index”给出最后一个元素时,我认为应该重要的是索引不存在,我想插入一个新行!如果我错了,请纠正我 【参考方案1】:

插入新记录的正确方法是:

df.append(pd.DataFrame(index=[last_date]))

例子:

print(df)

输出:

                   count    day hour    minute  label
time                    
2018-06-07 00:25:00 207 7.0 0.0 25.0    177.0
2018-06-07 00:55:00 187 7.0 0.0 55.0    150.0

要添加元素,请使用.append():

df.append(pd.DataFrame(index=[last_date]))

输出:

                     count  day  hour  label  minute
2018-06-07 00:25:00  207.0  7.0   0.0  177.0    25.0
2018-06-07 00:55:00  187.0  7.0   0.0  150.0    55.0
2018-06-07 01:25:00    NaN  NaN   NaN    NaN     NaN

如您所见,它使用定义的索引添加了一条新记录,由于我们没有为其他列指定值,所以它们是 NaN

您可以使用dict 为一列或多列指定值,如下所示:

data = 'hour':10 
df.append(pd.DataFrame(data, index=[last_date]))

输出:

                     count  day  hour  label  minute
2018-06-07 00:25:00  207.0  7.0   0.0  177.0    25.0
2018-06-07 00:55:00  187.0  7.0   0.0  150.0    55.0
2018-06-07 01:25:00    NaN  NaN   10.0    NaN     NaN

【讨论】:

非常感谢哈夫!我见过的例子几乎总是使用 concat 或直接更改索引 很高兴我能帮上忙。 @弗雷迪 我在少数地方看到 append 复制数据帧,更有效的方法是使用 .loc[],但是当我收到错误 ValueError: cannot set a row with mismatched columns使用df.loc[last_date] = data。你知道如何让它以这种方式工作吗?谢谢 @PS 似乎您需要将使用.append 创建的对象分配给另一个变量,因为.append 确实进行了就地修改,因此不会保存数据。这在您的帖子中并不清楚。 @Confounded 我已经添加了官方文档的链接。不可能将函数的每个方面都放在答案中,因此官方文档链接。很高兴你自己解决了这个问题。

以上是关于将具有日期时间索引的行插入数据框的主要内容,如果未能解决你的问题,请参考以下文章

MySQL触发器将日期插入具有唯一匹配ID的行

Python pandas:在groupby数据框中插入缺失日期、时间序列的行

将两个不相等的数据框与两个索引(日期时间和日期)上的部分公共元素合并

带有日期索引的熊猫数据框->插入MySQL

熊猫以时间为索引获取特定日期的行数

将具有两个日期列的一个数据框与另一个具有两个日期列的数据框合并