gpt4 book ai didi

python - Pandas 追加行为

转载 作者:太空宇宙 更新时间:2023-11-03 15:17:29 25 4
gpt4 key购买 nike

这是我不太确定的文档。

假设我有两个具有重叠数据的数据框。

DF1 有一个从 07:00:00 开始到 09:30:00 结束的 DateTimeIndex。

DF2 有一个从 07:00:00 开始到 11:30:00 结束的 DateTimeIndex。

DF2 是更新后的DF1,但相对于DF1 可能会在DF1 的结束时间之前添加一些行。所以 DF2 可能在更新时从 9:20:00-9:30:00 添加了 200 行,然后 09:30:00 之后的所有内容当然也是新的。

如果我使用:

DF1.append(DF2)

我会从 DF2 中获取所有新行吗?还是 pandas 只进入 DF1 结束后的行?除此之外,DF2 添加实际上可以与 DF1 行同时进行,但它会有不同的内容。 pandas 也会处理这个问题吗?

如果 pandas 不能处理这个问题,那么我自己处理这个问题的最佳方法是什么?

In [489]: df
Out[489]:
Row1 Row3
2013-11-05 08:00:00 2 NaN
2013-11-05 09:00:00 4 NaN
2013-11-05 09:06:00 6 5

In [490]: df2
Out[490]:
Row1 Row3
2013-11-05 08:00:00 2 NaN
2013-11-05 09:00:00 5 NaN
2013-11-05 09:09:00 6 5

In [491]: df.append(df2)
Out[491]:
Row1 Row3
2013-11-05 08:00:00 2 NaN
2013-11-05 09:00:00 4 NaN
2013-11-05 09:06:00 6 5
2013-11-05 08:00:00 2 NaN
2013-11-05 09:00:00 5 NaN
2013-11-05 09:09:00 6 5

在这种情况下,我希望 df.append(df2) 是:

In [491]: df.append(df2)
Out[491]:
Row1 Row3
2013-11-05 08:00:00 2 NaN
2013-11-05 09:00:00 4 NaN
2013-11-05 09:06:00 6 5
<strike>2013-11-05 08:00:00 2 NaN</strike>
2013-11-05 09:00:00 5 NaN
2013-11-05 09:09:00 6 5

编辑2:

我之前是这样做的:

last = df.ix[-1].name
to_append = df2[last:]
new_df = df.append(to_append)

不幸的是,这删除了新行但在我之前的 DataFrame 最后一行的时间戳之前

最佳答案

Append 类似于 python list 之一,您将把两个数据帧“堆叠”在一起。在索引重复的情况下是否引发 ValueErrorverify_integrity 参数控制 append,默认为 False .

>>> df = pd.DataFrame.from_dict({'col':{'row': 1}})
>>> df
col
row 1
>>> df.append(df).index
Index([u'row', u'row'], dtype=object)
>>> df.append(df)
col
row 1
row 1

>>> df.append(df, verify_integrity=True)
Traceback (most recent call last):
...
ValueError: Indexes have overlapping values: ['row']

合并替换使用combine_first:

>>> mdf = pd.DataFrame.from_dict({'col':{'row': 2, 'new':3}})
>>> df.combine_first(mdf) # values from df overwrite those of mdf
col
new 3
row 1
>>> mdf.combine_first(df) # values from mdf overwrite those of df
col
new 3
row 2

作为引用,这里是extensive guide关于数据帧的不同合并和连接方式

更新

跟进:如您所愿,行为类似于SQL union,一种方法可能是:

>>> df = pd.DataFrame.from_dict({'col':{'row': 1, 'new': 3}})
>>> mdf.append(df).drop_duplicates()
col
new 3
row 2
row 1

或者如果你想考虑索引,

>>> mdf['index'] = mdf.index
>>> df['index'] = df.index
>>> union = mdf.append(df).drop_duplicates()
>>> del union['index']
>>> union
col
new 3
row 2
row 1

关于python - Pandas 追加行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19798065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com