gpt4 book ai didi

python - 填充时间序列中缺失的天数(使用重复的键)

转载 作者:行者123 更新时间:2023-12-01 05:34:12 25 4
gpt4 key购买 nike

这是我在 Pandas 中尝试做的事情:

  • 加载包含特定日期股票信息的 CSV 文件
  • 日期列中查找最早和最晚日期
  • 创建一个新的数据框,其中最早和最晚之间的所有天数都已填充(NaN 或所有列的“缺失”之类的内容都可以)

目前看起来像这样:

import pandas as pd
import dateutil

df = pd.read_csv("https://dl.dropboxusercontent.com/u/84641/temp/berkshire_new.csv")
df['date'] = df['date'].apply(dateutil.parser.parse)
new_date_range = pd.date_range(df['date'].min(), df['date'].max())
df = df.set_index('date')
df.reindex(new_date_range)

不幸的是,这会引发以下错误,我不太明白:

ValueError: Shape of passed values is (3, 4825), indices imply (3, 4384)

我已经尝试了十几种这样的变体 - 但没有任何运气。任何帮助将不胜感激。

编辑:

经过进一步调查,问题似乎是由重复索引引起的。 CSV 确实包含每个日期的多个条目,这可能导致错误。

问题仍然相关:尽管每个日期都有重复的条目,但如何填补之间的空白?

最佳答案

因此,在考虑符号、日期、操作时,您会遇到重复的情况。

In [99]: df.head(10)
Out[99]:
symbol date change action
0 FDC 2001-08-15 00:00:00 15.069360 new
1 GPS 2001-08-15 00:00:00 19.653780 new
2 HON 2001-08-15 00:00:00 8.604316 new
3 LIZ 2001-08-15 00:00:00 6.711568 new
4 NKE 2001-08-15 00:00:00 22.686257 new
5 ODP 2001-08-15 00:00:00 5.686902 new
6 OSI 2001-08-15 00:00:00 5.893340 new
7 USB 2001-08-15 00:00:00 15.694478 new
8 NEE 2001-11-15 00:00:00 100.000000 new
9 GPS 2001-11-15 00:00:00 142.522231 increase

创建新的日期索引

In [102]: idx = pd.date_range(df.date.min(),df.date.max())

In [103]: idx
Out[103]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2001-08-15 00:00:00, ..., 2013-08-15 00:00:00]
Length: 4384, Freq: D, Timezone: None

这将按符号和 Action 分组然后重新索引设置为完整日期 (idx)选择剩下的唯一列(更改)现在索引是符号/日期

In [100]: df.groupby(['symbol','action']).apply(
lambda x: x.set_index('date').reindex(idx)
)['change'].reset_index(level=1).head()

Out[100]:
action change
symbol
ADM 2001-08-15 decrease NaN
2001-08-16 decrease NaN
2001-08-17 decrease NaN
2001-08-18 decrease NaN
2001-08-19 decrease NaN

In [101]: df.groupby(['symbol','action']).apply(lambda x: x.set_index('date').reindex(idx))['change'].reset_index(level=1)
Out[101]:
<class 'pandas.core.frame.DataFrame'>
MultiIndex: 977632 entries, (ADM, 2001-08-15 00:00:00) to (svm, 2013-08-15 00:00:00)
Data columns (total 2 columns):
action 977632 non-null values
change 490 non-null values
dtypes: float64(1), object(1)

然后您可以填写转发或任何您需要的内容。仅供引用,不确定您将对此做什么,但这不是一种非常常见的操作类型,因为您的数据大部分为空。

关于python - 填充时间序列中缺失的天数(使用重复的键),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19496533/

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