我在使用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是最好的方法吗?
谢谢。
答案 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
使用between
和hour
来切割所需的数据框。
答案 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
转到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')]