如何在两个日期时间之间选择数据帧行?

时间:2018-05-22 04:04:43

标签: python python-3.x pandas

我在使用CSV文件中的日期时间列从数据框中选择行时遇到问题。我有我的代码和我的示例数据。没有返回任何行。

pickers(pickers.minimumDate ,pickers.maximumDate)

CSV文件数据:

import pandas as pd
import numpy as np
col_names = ['date','msft','nok','aapl','ibm','amzn']
stockprices = pd.read_csv('./stockdata.csv', skiprows=1, names=col_names)
stockprices.loc['2018-01-01 9:00:00':'2018-01-01 11:00:00']

基本上,尝试在数据框中选择9:00:00,10:00和11:00:00的3行。

使用.loc是最好的方法吗?

谢谢。

4 个答案:

答案 0 :(得分:1)

<强> pd.date_range

i = pd.date_range('2018-01-01 09:00:00', periods=3, freq='1H')

# Result
DatetimeIndex(['2018-01-01 09:00:00', '2018-01-01 10:00:00',
           '2018-01-01 11:00:00'],
          dtype='datetime64[ns]', freq='H')

<强> to_datetime

df['date'] = pd.to_datetime(df.date)

<强> loc

df.loc[(df.date >= i[0]) & (df.date <= i[-1])]

                 date  msft  nok  aapl  ibm  amzn
1 2018-01-01 09:00:00   112    1   143  130  1298
2 2018-01-01 10:00:00   109   10   185  137  1647
3 2018-01-01 11:00:00    98   11   146  105  1331

答案 1 :(得分:0)

试试这个,

df['date']=pd.to_datetime(df['date'])
df[df['date'].dt.hour.between(9,11)]

输出:

                 date  msft  nok  aapl  ibm  amzn 
1 2018-01-01 09:00:00   112    1   143  130   1298
2 2018-01-01 10:00:00   109   10   185  137   1647
3 2018-01-01 11:00:00    98   11   146  105   1331

使用betweenhour来切割所需的数据框。

答案 2 :(得分:0)

df.loc 用于基于标签的行过滤。当您的数据框具有可用于过滤的标签时,或者默认情况下它从0开始到n。

dt_range = pd.date_range('2018-01-01 09:00:00', periods=3, freq='1H')
stockprices['dt'] = pd.to_datetime(stockprices['date'])

result = stockprices[stockprices['dt'].apply(lambda x: dt_range[0] <= x  and  dt_range[len(dt_range)-1] >= x)]
print("result df" , result )

答案 3 :(得分:0)

如果您有多个日期

您可以通过converting转到DateTimefilter

df["date"]=pd.to_datetime(df["date"])
df[df["date"].between('2018-01-01 09:00:00','2018-01-01 11:00:00')]