今天,我感到惊讶的是,当从数据文件中读取数据时,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日期对象)。有没有一种方法可以“学习” Pandas 到公认的日期?

最佳答案

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

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)
这样,您甚至可以将多个列合并到单个datetime列中,从而将“date”和“time”列合并到单个“datetime”列中:
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 in this page的指令(即用于不同格式的字母)。

10-04 15:55
查看更多