选取具有定义日期时间的行并保存在CSV fi中

2024-04-26 22:12:18 发布

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

我给了一个小的数据框,看起来像这样:
dataframe
在第一列“时间”中,给出了Unix epoch时间(ms)。 在第二列A中,行被数据填充
然后我想定义两次,比如:

t1 = 00:00:01.500
t2 = 00:00:02.000 

我的目标是将t1到t2之间的行剪切并保存在CSV文件中

要将Unix epoch时间转换为DateTime,我使用以下命令:

pd.to_datetime(time_ms, unit='ms').dt.time

现在我不知道如何将t1和t2定义为datetime。 我把它当作一个字符串,用if条件检查

time_ms = []
for i in df["time"]:
    if i >= t1 and i <= t2: 
        time_ms.append(i)

从逻辑上讲,它将不起作用,因为运算符不能用于字符串数据


Tags: 文件csv数据字符串目标datetimeif定义
1条回答
网友
1楼 · 发布于 2024-04-26 22:12:18

您已经将Unix Epox转换为datetime,并且只获得time

df['time_ms'] = pd.to_datetime(df['time'], unit='ms').dt.time

现在您必须将字符串"00:00:01.500"转换为datetime,并且只获取time

t1 = datetime.datetime.strptime("00:00:01.500", "%H:%M:%S.%f").time()
t2 = datetime.datetime.strptime("00:00:02.000", "%H:%M:%S.%f").time()

然后你可以过滤DataFrame

result = df[ (t1 < df['time_ms']) & (df['time_ms'] < t2) ]

最小工作示例:

import pandas as pd
import datetime

df = pd.DataFrame({
    'time': [0,1100,1200,1300,1400,1500,1600,1700,1800],
})    

df['time_ms'] = pd.to_datetime(df['time'], unit='ms').dt.time

t1 = datetime.datetime.strptime("00:00:01.500", "%H:%M:%S.%f").time()
t2 = datetime.datetime.strptime("00:00:02.000", "%H:%M:%S.%f").time()

result = df[ (t1 < df['time_ms']) & (df['time_ms'] < t2) ]

print(result)

结果:

   time          time_ms
6  1600  00:00:01.600000
7  1700  00:00:01.700000
8  1800  00:00:01.800000

相关问题 更多 >