读入年、度和微秒数据作为datetim

2024-05-08 03:01:16 发布

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

我有一个格式如下的数据文件:

year  doy    milliseconds    data
2000  103    272220          1.123
2000  103    373058          1.342
2000  103    471764          0.743
2000  103    573509          1.666
2000  103    664624          1.736
2000  103    758810          1.762
2000  103    951634          1.888
2000  103   1071637          1.444
2000  103   1156676          1.001

我想用python读懂的。我首先使用awk将数据转换为微秒,以便datetime模块可以读取数据,但它不能读取数据。数据读取良好,但日期返回为“nan”。我还尝试过转换为秒,并四舍五入为整数值,分钟也是如此。我想也许我需要读入数据,然后把毫秒改成小时:分钟:秒以使用日期时间,但我想先检查一下是否有更好的方法或我使用日期时间不正确。谢谢你的帮助!在

这是我的代码:

^{pr2}$

我用空格号来说明分隔符,因为我不能让'\t'工作-但是如果可以,请告诉我!在


Tags: 模块数据datadatetime数据文件格式时间整数
2条回答

使用普通的旧Python的datetime

import datetime

dates = []

with open('datafile.txt','r') as fp:
    fp.readline()
    lines = fp.readlines()

for line in lines:
    line = line.rstrip('\n').split()
    data = float(line[3])
    line = map(int, line[0:3])
    line.append(data)
    dates.append(line)

print '{0:<32}{1}'.format('datetime', 'data')
for dt in dates:
    date = datetime.datetime(dt[0], 1, 1) + datetime.timedelta(days=dt[1], milliseconds=dt[2])
    print '{0}\t{1}'.format(date, dt[3])

输出:

^{pr2}$

标题提到了微秒,而问题是指毫秒,因此根据需要更改传递给timedelta的参数。另外,我不确定data列指的是什么,也不知道如何将其包含在日期或时间中,因为问题确实包括毫秒。如果这个答案需要修改以匹配您想要的输出,请在注释中注明,我会更新。否则,修改它以获得精确的期望输出应该相当简单。在

请注意,仅使用python的本机datetime模块的代码几乎与pandas解决方案一样简洁,也许同样可读,如果我的代码更“pythonic”的话也会一样。在

不管怎样,希望这有帮助!在

使用pandas

import pandas as pd
f = r"df2dt.txt"
df = pd.read_csv(f, delim_whitespace=True)
td_ms = pd.to_timedelta(df['milliseconds'], unit='ms')
td_D = pd.to_timedelta(df['doy'] - 1, unit='D')
date_str = df['year'].astype(str)
date = pd.to_datetime(date_str, format="%Y", yearfirst=True)
date_time = date + td_D + td_ms
data = df['data']
print(date_time, data)

df2dt.txt是文件中的数据。在

相关问题 更多 >