gpt4 book ai didi

python - 如何切片以日期字段为索引的数据框?

转载 作者:太空宇宙 更新时间:2023-11-03 11:26:05 24 4
gpt4 key购买 nike

在我的 dataframe 中,我将索引更改为日期字段作为

df.index = df.TRX_DATE   # transaction date and type is class pandas.core.series.Series'

现在我想根据两个日期或任何日期差异对我的 dataframe 进行切片。

但我收到错误。

# currentdate is today date
startdate = currentdate - timedelta(days=30)

dflast30 = df.loc[startdate:currentdate] # error

尝试通过创建掩码来做

mask = (df['TRX_DATE'] >= startdate) & (df['TRX_DATE'] <= currentdate )
dflast30 = df.loc[mask]

dflast30 = df.loc[mask]

TypeError: unorderable types: str() > datetime.datetime()

然后我尝试像这样截断:

dflast30 = df.truncate(before = currentdate, after = startdate)

我得到了同样的错误。

我很困惑。我需要关于以下几点的建议:

  1. 我可以将索引(TRX_DATE 字段)更改为日期时间类型吗?

  2. 或者我应该将那个字符串字段设为类型。

  3. 或者我应该让未分配的索引保持原样,并根据我当前的要求在日期字段上进行搜索。

  4. 或者举例说明如何将日期字段作为日期范围的索引和切片,并请同时提及输出。

最佳答案

我认为您的第一种方法很好。

如果你想复制列 TRX_DATE 到索引:

df.index = pd.to_datetime(df['TRX_DATE'])

如果您不想复制,只需将列 TRX_DATE 设置为索引:

df = df.set_index(['TRX_DATE'])

这是我的演示:

import pandas as pd
import numpy as np
import io
import datetime as dt

temp=u"""TRX_DATE;A
2013-07-05;1
2013-08-06;1
2015-09-05;2
2015-10-08;2
2015-11-05;2
2015-11-25;2
2015-12-06;3"""

df = pd.read_csv(io.StringIO(temp), sep=";", parse_dates=[0])
print df
# TRX_DATE A
#0 2013-07-05 1
#1 2013-08-06 1
#2 2015-09-05 2
#3 2015-10-08 2
#4 2015-11-05 2
#5 2015-11-25 2
#6 2015-12-06 3

print df.dtypes
#TRX_DATE datetime64[ns]
#A int64
#dtype: object

#copy column TRX_DATE to index
#df.index = pd.to_datetime(df['TRX_DATE'])
#no copy, only set column TRX_DATE to index
df = df.set_index(['TRX_DATE'])
print df
# A
#TRX_DATE
#2013-07-05 1
#2013-08-06 1
#2015-09-05 2
#2015-10-08 2
#2015-11-05 2
#2015-11-25 2
#2015-12-06 3

currentdate = dt.date.today()
print currentdate
#2015-11-06

startdate = currentdate - pd.Timedelta(days=30)
print startdate
#2015-10-07

dflast30 = df.loc[startdate:currentdate]
print dflast30
# A
#TRX_DATE
#2015-10-08 2
#2015-11-05 2

dflast30 = dflast30.reset_index()
print dflast30
# TRX_DATE A
#0 2015-10-08 2
#1 2015-11-05 2

不同的方法,您可以在其中创建 df 的子集。无需设置datetimeindex

import pandas as pd
import numpy as np
import io
import datetime as dt

temp=u"""TRX_DATE;A
2013-07-05;1
2013-08-06;1
2015-09-05;2
2015-10-08;2
2015-11-05;2
2015-11-25;2
2015-12-06;3"""

df = pd.read_csv(io.StringIO(temp), sep=";", parse_dates=[0])
print df
# TRX_DATE A
#0 2013-07-05 1
#1 2013-08-06 1
#2 2015-09-05 2
#3 2015-10-08 2
#4 2015-11-05 2
#5 2015-11-25 2
#6 2015-12-06 3

print df.dtypes
#TRX_DATE datetime64[ns]
#A int64
#dtype: object

currentdate = dt.date.today()
print currentdate
#2015-11-06

startdate = currentdate - pd.Timedelta(days=30)
print startdate
#2015-10-07

dflast30 = df[(df.TRX_DATE >= startdate) & (df.TRX_DATE <= currentdate)]
print dflast30
# TRX_DATE A
#3 2015-10-08 2
#4 2015-11-05 2

关于python - 如何切片以日期字段为索引的数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33565643/

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