目前正在尝试通过一些教程。现在我有一个带有库存数据的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: []
想知道是否有人可以提供任何有关为何发生这种情况的见解?我原本期望在两个日期之间返回信息而不是空数据帧。谢谢!
切片之前的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)
因为您需要从上到下正确插入索引。试试这个特定的索引:
df.loc['2018-09-11':'2018-09-05']
但您可以使用sort()
对索引进行排序。
您也可以使用此ID。
如果timestamp
列是Pandas Timestamp,你可以这样做。
mask = (df['timestamp'] >= pd.Timestamp('2018-09-05')) & (df['timestamp'] <= pd.Timestamp('2018-09-11'))
df.loc[mask, :]
您只需要将日期从较新的转换为较旧的日期即可。
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)
如果您更改日期格式,它可以工作
df.loc['05/09/2018': '11/09/2018']