我有一些带时间戳的数据框作为列,我想用np.where在8:00:00到17:00:00之间过滤行。我不断收到有关数据/对象类型的错误消息。任何帮助将不胜感激
示例:
timestamp volume
2013-03-01 07:59:00 5
2013-03-01 08:00:00 6
2013-03-01 08:01:00 7
2013-03-01 08:02:00 8
基本上我想结束:
2013-03-01 08:00:00 6
2013-03-01 08:01:00 7
2013-03-01 08:02:00 8
使用
行的方法np.where(df['timestamp'] > dt.time('8:00:00')
答案 0 :(得分:2)
您可以使用between
我使用
生成了一个示例数据框import datetime
d = {'timestamp': pd.Series([datetime.datetime.now() +
datetime.timedelta(hours=i) for i in range(20)]),
'volume': pd.Series([s for s in range(20)])}
df = pd.DataFrame(d)
df['timeframe']
是
0 2017-02-13 22:37:54.515840
1 2017-02-13 23:37:54.515859
2 2017-02-14 00:37:54.515865
3 2017-02-14 01:37:54.515870
4 2017-02-14 02:37:54.515878
5 2017-02-14 03:37:54.515884
6 2017-02-14 04:37:54.515888
...
17 2017-02-14 15:37:54.515939
18 2017-02-14 16:37:54.515943
19 2017-02-14 17:37:54.515948
df.dtypes
timestamp datetime64[ns]
volume int64
dtype: object
正如您dtype
df['timestamp']
object
df['timestamp'] = pd.to_datetime(df['timestamp'], coerce=True)
中coerce=True
所做的那样
NaT
如果对任何特定字符串的转换失败,则设置参数between
,然后将这些行设置为df[df.timestamp.dt.strftime('%H:%M:%S').between('11:00:00','18:00:00')]
。
然后可以使用13 2017-02-14 11:37:54.515922 13
14 2017-02-14 12:37:54.515926 14
15 2017-02-14 13:37:54.515930 15
16 2017-02-14 14:37:54.515935 16
17 2017-02-14 15:37:54.515939 17
18 2017-02-14 16:37:54.515943 18
19 2017-02-14 17:37:54.515948 19
进行过滤,如下所示
<RepairOrder>
将返回
<Total>
答案 1 :(得分:1)
试试这个:
In [226]: df
Out[226]:
timestamp volume
0 2013-03-01 07:59:00 5
1 2013-03-01 08:00:00 6
2 2013-03-01 08:01:00 7
3 2013-03-01 08:02:00 8
In [227]: df.dtypes
Out[227]:
timestamp object
volume int64
dtype: object
In [228]: df['timestamp'] = pd.to_datetime(df['timestamp'], errors='coerce')
In [229]: df.dtypes
Out[229]:
timestamp datetime64[ns] # <---- it's `datetime64[ns]` now
volume int64
dtype: object
In [230]: df.set_index('timestamp').between_time('08:00','17:00').reset_index()
Out[230]:
timestamp volume
0 2013-03-01 08:00:00 6
1 2013-03-01 08:01:00 7
2 2013-03-01 08:02:00 8
答案 2 :(得分:0)
如果您的文件包含以下数据: 时间戳音量 2013-03-01 07:59:00 5 2013-03-01 08:00:00 6 2013-03-01 08:01:00 7 2013-03-01 08:02:00 8
然后,在只读时,您可以跳过第一行,您将获得输出为 时间戳音量 2013-03-01 08:00:00 6 2013-03-01 08:01:00 7 2013-03-01 08:02:00 8
import pandas as pd
df=pd.read_csv("filename",skiprows=1)
print(df)