我正在使用/学习Pandas来加载csv样式的数据集,其中有一个时间列可用作索引。数据大约在100 at处采样。以下是数据的简化片段:
Time (sec) Col_A Col_B Col_C 0.0100 14.175 -29.97 -22.68 0.0200 13.905 -29.835 -22.68 0.0300 12.257 -29.32 -22.67 ... ... 1259.98 -0.405 2.205 3.825 1259.99 -0.495 2.115 3.735
有20分钟的数据,导致约12万行在100赫兹。我的目标是在特定的时间范围内选择这些行,比如100到200秒。
以下是我想出的
import panda as pd
df = pd.DataFrame(my_data) # my_data is a numpy array
df.set_index(0, inplace=True)
df.columns = ['Col_A', 'Col_B', 'Col_C']
df.index = pd.to_datetime(df.index, unit='s', origin='1900-1-1') # the date in origin is just a space-holder我的数据集不包括日期。如何避免像我上面所做的那样设定一个假日期?这感觉不对,而且当我按时间绘制数据时也很烦人。
我知道有一些方法可以从像here这样的datatime对象中删除日期。但我的目标是选择某些在特定时间范围内的行,这意味着我需要使用pd.date_range()。此功能似乎在没有日期的情况下工作。
如果我只是在整个项目中使用一个假的约会,那就不是世界末日了。但我想知道是否有更优雅的方法来解决这个问题。
发布于 2018-07-19 02:01:22
我不明白为什么需要为此使用datetime64对象。您的时间列是一个数字,因此您可以非常容易地选择带有不等式的时间间隔。您也可以在没有问题的情况下绘制这些列。
样本数据
import pandas as pd
import numpy as np
np.random.seed(123)
df = pd.DataFrame({'Time': np.arange(0,1200,0.01),
'Col_A': np.random.randint(1,100,120000),
'Col_B': np.random.randint(1,10,120000)})选择100到200秒之间的数据。
df[df.Time.between(100,200)]产出:
Time Col_A Col_B
10000 100.00 75 9
10001 100.01 23 7
...
19999 199.99 39 7
20000 200.00 25 2谋反时间
#First 100 rows just for illustration
df[0:100].plot(x='Time')

转换为timedelta64
如果您真的愿意,可以将该列转换为timedelta64[ns]
df['Time'] = pd.to_datetime(df.Time, unit='s') - pd.to_datetime('1970-01-01')
print(df.head())
# Time Col_A Col_B
#0 00:00:00 67 6
#1 00:00:00.010000 93 1
#2 00:00:00.020000 99 3
#3 00:00:00.030000 18 2
#4 00:00:00.040000 84 3
df.dtypes
#Time timedelta64[ns]
#Col_A int32
#Col_B int32
#dtype: objecthttps://stackoverflow.com/questions/51411971
复制相似问题