python - Pandas :使用 read_csv 解析不同列中的日期

标签 python pandas parsing datetime dataframe

我有一个 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

将文件加载到 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'))

我遇到了一些错误:

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'

我很困惑,因为:

  1. 我将字典传递给 parse_dates 以将不同的列解析为单个日期。
  2. 我正在使用:%b - 缩写月份名称,%d - 月份中的第几天,%Y 年份和世纪, %H 24 小时,%M - 分钟,%S - 秒

有人看到我做错了什么吗?

编辑:

我试过 date_parser=lambda x: datetime.strptime(x, '%b %d %Y %H:%M:%S') 返回 ValueError: unconverted数据保持:.000

编辑 2:

我尝试了@MaxU 在他的更新中建议的方法,但这是有问题的,因为我的原始数据格式如下:

Jan   1  2017  00:00:00.000   123 456 789 111 222 333 

我只对前 7 列感兴趣,所以我使用以下内容导入我的文件:

df = read_csv(fn, header=None, delim_whitespace=True, usecols=[0, 1, 2, 3, 4, 5, 6])

然后从我尝试的前 4 列中创建一个包含日期时间信息的列:

df['datetime'] = to_datetime(df.ix[:, :3], format='%b %d %Y %H:%M:%S.%f')

但是这不起作用,因为 to_datetime 期望“整数、 float 、字符串、日期时间、列表、元组、一维数组、系列”作为第一个参数和 df.ix [:, :3] 返回具有以下格式的数据框:

         0   1     2             3
0      Jan   1  2017  00:00:00.000

如何将前四列的每一行输入到 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])

我想手动解析而不是像@MaxU 建议的那样让 pandas 处理它的全部原因是看看手动输入指令是否会更快 - 确实如此!根据我的测试,上面的代码片段运行速度比让 pandas 为您推断解析快大约 5-6 倍。

最佳答案

试试这个更简单的方法:

df = pandas.read_csv('file.txt')
df.columns = ['date']

df 应该是具有单列的数据框。之后尝试将该列转换为日期时间

df['date'] = pd.to_datetime(df['date'])

关于python - Pandas :使用 read_csv 解析不同列中的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45090567/

相关文章:

python - AppEngine appcfg 在 "Getting current resource limits"时报告 503 和 500

python - Django 管理表单 : dynamic fields list causes a KeyError which I can bypass just by pressing F5, 为什么?

python - 如何使列表类型中的 "expand"静态

python - 按两列分组并将不同的分位数打印为单独的列

java - SimpleDateFormat 解析和不明确的日期格式

python - 如何解码 REG_BINARY 值 HKLM\Software\Microsoft\Ole\DefaultLaunchPermission 以查看哪些用户拥有权限?

python - `DataFrame` 行的内存高效过滤

python - 使用 Pandas 的宽到长数据集

javascript - 如何解析嵌套在 bls.gov 列表中的 JSON 以在 React-chartjs-2 中使用

r - R:使用xpath过滤节点