标签: datetimeindex

用 NaN 填充日期时间索引间隙

我有两个日期时间索引的数据框。一个缺少一些这样的日期时间 ( df1) 而另一个是完整的(具有常规时间戳,在本系列中没有任何间隙)并且充满了NaN's ( df2)。

我试图从DF1值匹配的指数df2,带馅NaN的,其中这种datetimeindex不存在的df1

例子:

In  [51]: df1
Out [51]:                       value
          2015-01-01 14:00:00   20
          2015-01-01 15:00:00   29
          2015-01-01 16:00:00   41
          2015-01-01 17:00:00   43
          2015-01-01 18:00:00   26
          2015-01-01 19:00:00   20
          2015-01-01 20:00:00   31
          2015-01-01 21:00:00   35
          2015-01-01 22:00:00   39
          2015-01-01 23:00:00   17
          2015-03-01 00:00:00   6
          2015-03-01 01:00:00   37
          2015-03-01 02:00:00   56
          2015-03-01 03:00:00   12
          2015-03-01 04:00:00   41
          2015-03-01 05:00:00   31
          ...   ...

          2018-12-25 23:00:00   41

          <34843 …
Run Code Online (Sandbox Code Playgroud)

python pandas reindex gaps-in-data datetimeindex

5
推荐指数
1
解决办法
1904
查看次数

熊猫:年/月的DataFrame分组依据,并返回新的DatetimeIndex

DateFrame按年份或月份对Pandas 对象进行分组并返回DateFrame具有新索引的新对象时,我需要一些指导。到目前为止,这是我的代码。groupby按预期工作。

从.csv文件加载数据,将“日期”解析为日期格式(finance.yahoo.com的历史股票报价)

In [23]: import pandas as pd
         file = pd.read_csv("sdf.de.csv", parse_dates=['Date'])
         file.head(2)

Out[23]:
    Date        Open    High    Low     Close   Volume  Adj Close
0   2016-02-16  18.650  18.70   17.940  18.16   1720800 17.0600
1   2016-02-15  18.295  18.64   18.065  18.50   1463500 17.3794
Run Code Online (Sandbox Code Playgroud)

将“日期”升序排序文件,并将索引设置为 Date

In [24]: daily = file.sort_values(by='Date').set_index('Date')
         daily.head()

Out[24]:
            Open    High    Low     Close   Volume  Adj Close
Date                        
2000-01-03  14.20   14.50   14.15   14.40   277400  2.7916
2000-01-04  14.29   14.30   13.90   14.15   109200  2.7431
Run Code Online (Sandbox Code Playgroud)

每月分组

我将对apply()这些组进行附加处理,这将压缩特定组的数据,例如,找到 …

python pandas datetimeindex

5
推荐指数
1
解决办法
5653
查看次数

第二级多索引的时间片

pandas允许对时间索引进行冷切片.例如,我可以df通过以下方式切割2012年1月至2012年3月的数据帧:

df['2012-01':'2012-03']
Run Code Online (Sandbox Code Playgroud)

但是,我有一个df带有multiindex 的数据帧,其中时间索引是第二级.看起来像:

                     A         B         C         D         E
a 2001-01-31  0.864841  0.789273  0.370031  0.448256  0.178515
  2001-02-28  0.991861  0.079215  0.900788  0.666178  0.693887
  2001-03-31  0.016674  0.855109  0.984115  0.436574  0.480339
  2001-04-30  0.120924  0.046013  0.659807  0.210534  0.694029
  2001-05-31  0.788149  0.296244  0.478201  0.845042  0.437814
b 2001-01-31  0.497646  0.349958  0.223227  0.812331  0.975012
  2001-02-28  0.542572  0.472267  0.276186  0.970909  0.138683
  2001-03-31  0.960813  0.666942  0.069349  0.282741  0.127992
  2001-04-30  0.491422  0.678742  0.048784  0.612312  0.713472
  2001-05-31  0.718721  0.504403  0.069047  0.253682  0.836386
Run Code Online (Sandbox Code Playgroud)

我仍然可以通过以下方式在任何特定级别使用上述方法切片:

df.loc['a']['2012-01':'2012-03']
Run Code Online (Sandbox Code Playgroud)

但这只是为了level0 == …

python multi-index pandas datetimeindex

5
推荐指数
1
解决办法
548
查看次数

基于小时/分钟/秒拆分 DateTimeIndex 数据

我有时间序列数据,我想根据小时、分钟或秒进行拆分。这通常是用户定义的。我想知道如何做到这一点。

例如,请考虑以下情况:

test = pd.DataFrame({'TIME': pd.date_range(start='2016-09-30',
                                           freq='600s', periods=20)})
test['X'] = np.arange(20)
Run Code Online (Sandbox Code Playgroud)

输出是:

    TIME                X
0   2016-09-30 00:00:00 0
1   2016-09-30 00:10:00 1
2   2016-09-30 00:20:00 2
3   2016-09-30 00:30:00 3
4   2016-09-30 00:40:00 4
5   2016-09-30 00:50:00 5
6   2016-09-30 01:00:00 6
7   2016-09-30 01:10:00 7
8   2016-09-30 01:20:00 8
9   2016-09-30 01:30:00 9
10  2016-09-30 01:40:00 10
11  2016-09-30 01:50:00 11
12  2016-09-30 02:00:00 12
13  2016-09-30 02:10:00 13
14  2016-09-30 02:20:00 14
15  2016-09-30 02:30:00 15
16  2016-09-30 …
Run Code Online (Sandbox Code Playgroud)

pandas datetimeindex

5
推荐指数
1
解决办法
1938
查看次数

无法使用日期作为字符串对pandas数据帧(以日期为键)进行切片

我正在生成一个空数据框,其中包含一系列日期作为索引.数据将在稍后添加到数据框中.

cbd=pd.date_range(start=pd.datetime(2017,01,02),end=pd.datetime(2017,01,30),period=1)

df = pd.DataFrame(data=None,columns=['Test1','Test2'],index=cbd)

df.head()
           Test1 Test2
2017-01-02   NaN   NaN
2017-01-03   NaN   NaN
2017-01-04   NaN   NaN
2017-01-05   NaN   NaN
2017-01-06   NaN   NaN
Run Code Online (Sandbox Code Playgroud)

一些切片方法似乎不起作用.以下返回KeyError:

df['2017-01-02']
Run Code Online (Sandbox Code Playgroud)

但是,以下任何工作:

df['2017-01-02':'2017-01-02']
df.loc['2017-01-02']
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?为什么第一个切片不返回结果?

python dataframe pandas datetimeindex

5
推荐指数
1
解决办法
3114
查看次数

Pandas:使用日期列表和DateTimeIndex访问数据

我有一个pandas DataFrame DateTimeIndex:

                           A          B
2016-04-25 18:50:06   440.967796   201.049600  
2016-04-25 18:50:13   441.054995   200.767034  
2016-04-25 18:50:20   441.142337   200.484475
...
2016-07-27 18:50:06   440.967796   201.049600  
2016-07-27 18:50:13   441.054995   200.767034  
2016-07-27 18:50:20   441.142337   200.484475
Run Code Online (Sandbox Code Playgroud)

我想yyyy-mm-dd使用日期列表提取给定日期的所有数据:['2016-04-25','2016-04-28',...]

我尝试了以下方法:

 df[df.index.isin(['2016-04-25', '2016-04-26'])]

 Empty DataFrame
Run Code Online (Sandbox Code Playgroud)

我想检索此列表中给出的日期的所有数据(一整天的数据)

python dataframe pandas datetimeindex

5
推荐指数
1
解决办法
2039
查看次数

如何在 Pandas DataFrame 索引中获取每个月的最后一天(使用 TimeGrouper)

我有一个日期不完整的 DataFrame,我只需要每个月最后一天可用的日期/行。我尝试使用 TimeGrouper 并获取.last()每个组。

import pandas as pd
idx = [pd.datetime(2016,2,1),pd.datetime(2017,1,20),pd.datetime(2017,2,1),pd.datetime(2017,2,27)]
df = pd.DataFrame([1,2,3,4],index=idx)
df
        0
2016-02-01  1
2017-01-20  2
2017-02-01  3
2017-02-27  4
Run Code Online (Sandbox Code Playgroud)

期待:

df_eom
        0
2016-02-01  1
2017-01-20  2
2017-02-27  4
Run Code Online (Sandbox Code Playgroud)

但是我得到了这个:

df_eom = df.groupby(pd.TimeGrouper(freq='1M')).last()
df_eom
              0
2016-02-29  1.0
2016-03-31  NaN
2016-04-30  NaN
2016-05-31  NaN
2016-06-30  NaN
2016-07-31  NaN
2016-08-31  NaN
2016-09-30  NaN
2016-10-31  NaN
2016-11-30  NaN
2016-12-31  NaN
2017-01-31  2.0
2017-02-28  4.0
Run Code Online (Sandbox Code Playgroud)

它不仅创建了不在 df 中的日期,而且还更改了 df 第一行和最后一行的索引。我使用 TimeGrouper 错了吗?

python python-datetime pandas datetimeindex pandas-groupby

5
推荐指数
2
解决办法
7321
查看次数

熊猫石斑鱼vs时间石斑鱼

新版pandas不推荐使用TimeGrouper,因此我们应该使用常规的Grouper

旧代码:

df['column_name'].groupby(pd.TimeGrouper("M")).mean().plot()
Run Code Online (Sandbox Code Playgroud)

在旧版本的熊猫中工作正常。但是,没有:

df.groupby(pd.Grouper(key='column_name', freq="M")).mean().plot()
df['column_name'].groupby(pd.Grouper(freq="M")).mean().plot()
Run Code Online (Sandbox Code Playgroud)

在新版本中可用。认为钥匙丢失,或者熊猫抱怨:

Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'Float64Index'
Run Code Online (Sandbox Code Playgroud)

编辑

import pandas as pd

df = pd.DataFrame({'column_name':['2017-01-01', '2017-01-02'],
                  'column_value':[1,3]})

df

df.index = pd.DatetimeIndex(df.column_name)

df.index

# old version
df['column_value'].groupby(pd.TimeGrouper("M")).mean().plot()

# new version
df.groupby(pd.Grouper(key='column_value', freq="M")).mean().plot()
Run Code Online (Sandbox Code Playgroud)

python grouping pandas datetimeindex

4
推荐指数
1
解决办法
8256
查看次数

如何获取 pandas DateTimeIndex 中的日期时间索引?

datetime有没有办法直接获取a 中某个元素的索引DateTimeIndex

我有以下玩具示例代码,在将其转换DateTimeIndexlist.

import pandas as pd
import datetime

year = 2020
minutesStep = 10
dateTimeStr = "2020-01-01 00:40:00"

datesTimes = pd.date_range(start='1/1/'+str(year), end='1/1/'+str(year+1), freq=str(minutesStep)+'min')
dateTimeObj = datetime.datetime.strptime(dateTimeStr, '%Y-%m-%d %H:%M:%S')

l = datesTimes.tolist()
i = l.index(dateTimeObj)
print i
print datesTimes[i]
Run Code Online (Sandbox Code Playgroud)

这输出了预期的内容:

>>> 
4
2020-01-01 00:40:00
Run Code Online (Sandbox Code Playgroud)

不过我想直接从DateTimeIndex. 那可能吗?

python pandas datetimeindex

4
推荐指数
1
解决办法
3273
查看次数

熊猫时间戳不规则地舍入30秒

我正在尝试将熊猫的DatetimeIndex(或Timestamp)四舍五入到最近的分钟,但是Timestamps为30秒时出现了问题-有些向上舍入,有些向下舍入(这似乎是交替的)。

有什么建议可以解决此问题,以使30s总是四舍五入吗?

>>> pd.Timestamp(2019,6,1,6,57,30).round('1T')
Timestamp('2019-06-01 06:58:00')

>>> pd.Timestamp(2019,6,1,6,58,30).round('1T')
Timestamp('2019-06-01 06:58:00')
Run Code Online (Sandbox Code Playgroud)

最高结果看起来不错,其中57m 30s会四舍五入为58m,但是我希望最低结果会舍入到59m-不减少到58m。

python pandas datetimeindex

4
推荐指数
2
解决办法
60
查看次数