Pandas DataFrame.loc返回Empty DataFrame

问题描述 投票:3回答:5

目前正在尝试通过一些教程。现在我有一个带有库存数据的pandas Dataframe。通过读取csv文件获取库存数据,然后使用df.set_index('timestamp', inplace = True)我将索引设置为使用'timestamp'。头在这里看到:

 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']时,我得到一个Empty DataFrame,如下所示:

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

想知道是否有人可以提供任何有关为何发生这种情况的见解?我原本期望在两个日期之间返回信息而不是空数据帧。谢谢!

python pandas dataframe
5个回答
3
投票

切片之前的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)

0
投票

因为您需要从上到下正确插入索引。试试这个特定的索引:

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

但您可以使用sort()对索引进行排序。 您也可以使用此ID。


0
投票

如果timestamp列是Pandas Timestamp,你可以这样做。

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

df.loc[mask, :]

0
投票

您只需要将日期从较新的转换为较旧的日期即可。

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
投票

如果您更改日期格式,它可以工作

df.loc['05/09/2018': '11/09/2018']
© www.soinside.com 2019 - 2024. All rights reserved.