Pandas DataFrame.loc возвращает пустой DataFrame - PullRequest
0 голосов
/ 12 сентября 2018

В настоящее время пытаюсь проработать некоторые учебники. Прямо сейчас у меня есть пандас Dataframe с данными о запасах. Данные о запасах были получены путем чтения CSV-файла, а затем с помощью df.set_index('timestamp', inplace = True) я установил индекс для использования метки времени. Здесь видна голова:

 timestamp   open   high    low   close  adjusted_close   volume  dividend_amount  split_coefficient
2018-09-11  74.95  75.69  74.76  75.64           75.64  2225700              0.0                1.0
2018-09-10  75.10  75.21  74.84  74.91           74.91  1774400              0.0                1.0
2018-09-07  75.20  75.20  74.72  75.01           75.01  1804800              0.0                1.0
2018-09-06  74.95  75.55  74.62  75.24           75.24  3058300              0.0                1.0
2018-09-05  75.03  75.42  74.80  74.95           74.95  2418400              0.0                1.0

Когда я пытаюсь df.loc['2018-09-05'], он возвращает мне правильную строку. Однако, когда я пытаюсь выбрать диапазон, такой как df.loc['2018-09-05':'2018-09-11'], я получаю пустой DataFrame, возвращенный так:

Empty DataFrame
Columns: [open, high, low, close, adjusted_close, volume, dividend_amount, 
split_coefficient]
Index: []

Интересно, кто-нибудь может дать какое-либо представление о том, почему это происходит? Я ожидал бы возврата информации между двумя датами вместо пустого кадра данных. Спасибо!

Ответы [ 5 ]

0 голосов
/ 12 сентября 2018

Работает, если вы измените формат даты

df.loc['05/09/2018': '11/09/2018']
0 голосов
/ 12 сентября 2018

Вам просто нужно поменять даты с новых на старые, и это будет работать.

import pandas as pd
df = pd.read_csv('some.csv', delimiter=";", index_col='timestamp')
range = df.loc['2018-09-11':'2018-09-05']
print(range)
0 голосов
/ 12 сентября 2018

Потому что вам нужно правильно вставить свой индекс сверху вниз. Попробуйте это для конкретной индексации:

df.loc['2018-09-11':'2018-09-05']

Но вы можете использовать sort() для сортировки индекса.
Вы также можете использовать идентификатор для этого.

0 голосов
/ 12 сентября 2018

Если в столбце timestamp указано Pandas Timestamp, вы можете сделать что-то вроде этого.

mask = (df['timestamp'] >= pd.Timestamp('2018-09-05')) & (df['timestamp'] <= pd.Timestamp('2018-09-11'))

df.loc[mask, :]
0 голосов
/ 12 сентября 2018

sort_index() перед нарезкой будет работать:

df = df.sort_index()
df['2018-09-05':'2018-09-11']

или

df = df.sort_index()
df.loc['2018-09-05':'2018-09-11']

К вашему сведению: если вы хотите убедиться, что индекс равен DatetimeIndex, прежде чем сделать 'timestamp' индексом:

df.timestamp = pd.to_datetime(df.timestamp)
df = df.set_index('timestamp')

или по факту:

df.index = pd.to_datetime(df.index)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...