Ard*_*lan 3 python datetime parsing dataframe pandas
我有一个 ascii 文件,其中的日期格式如下:
Jan 20 2015 00:00:00.000
Jan 20 2015 00:10:00.000
Jan 20 2015 00:20:00.000
Jan 20 2015 00:30:00.000
Jan 20 2015 00:40:00.000
Run Code Online (Sandbox Code Playgroud)
将文件加载到 Pandas 时,上面的每一列在 Pandas 数据框中都有自己的列。我尝试了以下变体:
from pandas import read_csv
from datetime import datetime
df = read_csv('file.txt', header=None, delim_whitespace=True,
parse_dates={'datetime': [0, 1, 2, 3]},
date_parser=lambda x: datetime.strptime(x, '%b %d %Y %H %M %S'))
Run Code Online (Sandbox Code Playgroud)
我收到几个错误:
TypeError: <lambda>() takes 1 positional argument but 4 were given
ValueError: time data 'Jun 29 2017 00:35:00.000' does not match format '%b %d %Y %H %M %S'
Run Code Online (Sandbox Code Playgroud)
我很困惑,因为:
parse_dates将不同的列解析为单个日期。%b- 缩写的月份名称,%d- 月份中的日期,%Y带有世纪的年份,%H24 小时,%M- 分钟和%S- 秒有人看到我做错了什么吗?
编辑:
我试过date_parser=lambda x: datetime.strptime(x, '%b %d %Y %H:%M:%S')哪个返回ValueError: unconverted data remains: .000
编辑2:
我尝试了@MaxU 在他的更新中建议的内容,但有问题,因为我的原始数据格式如下:
Jan 1 2017 00:00:00.000 123 456 789 111 222 333
Run Code Online (Sandbox Code Playgroud)
我只对前 7 列感兴趣,所以我使用以下内容导入我的文件:
df = read_csv(fn, header=None, delim_whitespace=True, usecols=[0, 1, 2, 3, 4, 5, 6])
Run Code Online (Sandbox Code Playgroud)
然后从前 4 列创建一个包含日期时间信息的列,我尝试:
df['datetime'] = to_datetime(df.ix[:, :3], format='%b %d %Y %H:%M:%S.%f')
Run Code Online (Sandbox Code Playgroud)
但是这不起作用,因为to_datetime需要“整数、浮点数、字符串、日期时间、列表、元组、一维数组、系列”作为第一个参数并df.ix[:, :3]返回具有以下格式的数据帧:
0 1 2 3
0 Jan 1 2017 00:00:00.000
Run Code Online (Sandbox Code Playgroud)
如何在前四列的每一行中输入to_datetime,以便获得一列datetimes?
编辑3:
我想我解决了我的第二个问题。我只是习惯于遵循命令并在读取文件时执行所有操作(我基本上只是缺少%f解析过去几秒钟的内容):
df = read_csv(fileName, header=None, delim_whitespace=True,
parse_dates={'datetime': [0, 1, 2, 3]},
date_parser=lambda x: datetime.strptime(x, '%b %d %Y %H:%M:%S.%f'),
usecols=[0, 1, 2, 3, 4, 5, 6])
Run Code Online (Sandbox Code Playgroud)
我想手动解析而不是让熊猫像@MaxU 建议的那样处理它的全部原因是看看手动输入指令是否会更快 - 确实如此!从我的测试来看,上面的代码片段比让 Pandas 为您推断解析的运行速度大约快 5-6 倍。
试试这个更简单的方法:
df = pandas.read_csv('file.txt')
df.columns = ['date']
Run Code Online (Sandbox Code Playgroud)
df应该是具有单列的数据框。之后尝试将该列转换为日期时间
df['date'] = pd.to_datetime(df['date'])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6534 次 |
| 最近记录: |