今天,当我从数据文件(例如)读取数据时,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 日期对象)。有没有办法“学习”熊猫来识别日期?
2013-6-4
您应该添加parse_dates=True,或者parse_dates=['column name']在阅读时,通常足以神奇地解析它。但是总是有一些奇怪的格式需要手动定义。在这种情况下,您还可以添加日期解析器功能,这是可能的最灵活的方式。
parse_dates=True
parse_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)
您可以在此页面strptime中找到和的指令(即用于不同格式的字母)。strftime
strptime
strftime