Как выбрать строки данных между двумя датами? - PullRequest
0 голосов
/ 22 мая 2018

У меня проблемы с выбором строк в кадре данных со столбцом даты и времени из файла 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']

Данные CSV-файла:

        date               msft   nok   aapl   ibm  amzn 
    2018-01-01 08:00:00     107     2   161    140  1295
    2018-01-01 09:00:00     112     1   143    130  1298 
    2018-01-01 10:00:00     109    10   185    137  1647 
    2018-01-01 11:00:00      98    11   146    105  1331
    2018-01-01 12:00:00      83    3    214    131  1355

Обычно при попытке выбрать 3 строки с 9:00:00, 10:00:00 и 11:00:00 раз вфрейм данных.

Является ли использование .loc лучшим способом сделать это?

Спасибо.

Ответы [ 4 ]

0 голосов
/ 22 мая 2018

Если у вас есть несколько дат

, вы можете получить их от converting до DateTime и filter

df["date"]=pd.to_datetime(df["date"])
df[df["date"].between('2018-01-01 09:00:00','2018-01-01 11:00:00')]
0 голосов
/ 22 мая 2018

попробуйте это,

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

используйте between и hour для нарезки нужного кадра данных.

0 голосов
/ 22 мая 2018

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 )
0 голосов
/ 22 мая 2018

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...