在没有d的数据帧中选择一个时间范围

2024-09-30 05:20:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用/learningPandas加载一个csv样式的数据集,其中有一个可以用作索引的时间列。数据采样频率约为100Hz。下面是一个简化的数据片段:

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分钟的数据,在100赫兹下产生大约120000行。我的目标是在一定的时间范围内(比如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

我的数据集不包括日期。如何避免像我上面那样设定假约会?这感觉不对,而且当我按时间绘制数据时也很烦人。在

我知道有很多方法可以从datatime对象中删除date,比如here。 但是我的目标是选择在某个时间范围内的一些行,这意味着我需要使用pd.date_range()。如果没有日期,此函数似乎无法工作。在

如果我在整个项目中使用一个假日期并不是世界末日。但我想知道是否有更优雅的方式来解决这个问题。在


Tags: csv数据目标dfdatadateindexis
1条回答
网友
1楼 · 发布于 2024-09-30 05:20:12

我不明白为什么您需要为此使用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秒之间的数据。

^{pr2}$

输出:

         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')

enter image description here


转换为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: object

相关问题 更多 >

    热门问题