【发布时间】:2016-09-02 17:16:43
【问题描述】:
我的数据集在各个列中包含日期(儒略日,第 1 列)、小时(HHMM,第 2 列)和秒(第 3 列):
1 253 2300 0 2.9 114.4 18.42 21.17
1 253 2300 10 3.27 111.2 18.48 21.12
1 253 2300 20 3.22 111.3 18.49 21.09
1 253 2300 30 3.84 106.4 18.52 21
1 253 2300 40 3.75 104.4 18.53 20.85
我正在使用Pandas 读取文本文件:
columns = ['station','julian_day','hours','seconds','U','Ud','T','RH']
df = pd.read_table(file_name, header=None, names=columns, delim_whitespace=True)
现在我想将日期转换为更方便的日期,例如YYYY-MM-DD HH:MM:SS(数据集中没有提供年份,但固定为 2001)。
我尝试使用parse_dates 将三列合二为一:
df = pd.read_table(file_name, header=None, names=columns, delim_whitespace=True,
parse_dates={'datetime' : ['julian_day','hours','seconds']})
将三列转换为一个字符串:
In [38]: df['datetime'][0]
Out[38]: '253 2300 0'
接下来我尝试使用date_parser 转换它们;关注this post,使用类似:
date_parser = lambda x: datetime.datetime.strptime(x, '%j %H%M %s')
date_parser 本身可以工作,但我无法将它与read_table 结合使用,而且我几乎被困在这一点上。有没有简单的方法来实现转换?
完整的最小(不那么)工作示例:
import pandas as pd
import datetime
from io import StringIO
data_file = StringIO("""\
1 253 2300 0 2.9 114.4 18.42 21.17
1 253 2300 10 3.27 111.2 18.48 21.12
1 253 2300 20 3.22 111.3 18.49 21.09
1 253 2300 30 3.84 106.4 18.52 21
1 253 2300 40 3.75 104.4 18.53 20.85
""")
date_parser = lambda x: datetime.datetime.strptime(x, '%j %H%M %S')
columns = ['station','julian_day','hours','seconds','U','Ud','T','RH']
df = pd.read_table(data_file, header=None, names=columns, delim_whitespace=True,\
parse_dates={'datetime' : ['julian_day','hours','seconds']})
【问题讨论】: