pandas 可以自动从 CSV 文件中读取日期吗?

新手上路,请多包涵

今天,当我从数据文件(例如)读取数据时,pandas 能够识别值的类型,这让我感到非常惊讶:

 df = pandas.read_csv('test.dat', delimiter=r"\s+", names=['col1','col2','col3'])

例如可以这样检查:

 for i, r in df.iterrows():
    print type(r['col1']), type(r['col2']), type(r['col3'])

特别是整数、浮点数和字符串被正确识别。但是,我有一列具有以下格式的日期: 2013-6-4 。这些日期被识别为字符串(而不是 python 日期对象)。有没有办法“学习”熊猫来识别日期?

原文由 Roman 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 878
2 个回答

您应该在阅读时添加 parse_dates=Trueparse_dates=['column name'] ,这通常足以神奇地解析它。但是总是有一些奇怪的格式需要手动定义。在这种情况下,您还可以添加日期解析器功能,这是可能的最灵活的方式。

假设您的字符串中有一个“日期时间”列,那么:

 from datetime import datetime
dateparse = lambda x: datetime.strptime(x, '%Y-%m-%d %H:%M:%S')

df = pd.read_csv(infile, parse_dates=['datetime'], date_parser=dateparse)

通过这种方式,您甚至可以将多个列合并到一个日期时间列中,这会将一个“日期”和一个“时间”列合并到一个“日期时间”列中:

 dateparse = lambda x: datetime.strptime(x, '%Y-%m-%d %H:%M:%S')

df = pd.read_csv(infile, parse_dates={'datetime': ['date', 'time']}, date_parser=dateparse)

您可以 在此页面中 找到 strptimestrftime 的指令(即用于不同格式的字母)。

原文由 Rutger Kassies 发布,翻译遵循 CC BY-SA 4.0 许可协议

自从@Rutger 回答以来,pandas 界面可能发生了变化,但在我使用的版本 (0.15.2) 中, date_parser 函数接收日期列表而不是单个值。在这种情况下,他的代码应该像这样更新:

 from datetime import datetime
import pandas as pd

dateparse = lambda dates: [datetime.strptime(d, '%Y-%m-%d %H:%M:%S') for d in dates]

df = pd.read_csv('test.dat', parse_dates=['datetime'], date_parser=dateparse)

由于最初的提问者说他想要日期并且日期是 2013-6-4 格式,所以 dateparse 函数应该是:

 dateparse = lambda dates: [datetime.strptime(d, '%Y-%m-%d').date() for d in dates]

原文由 Sean 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题