首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pandas可以自动从CSV文件中读取日期吗?

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

Stack Overflow用户
提问于 2013-07-04 16:08:40
回答 11查看 278.3K关注 0票数 194

今天,我非常惊讶于这样一个事实:当从数据文件(例如)读取数据时,pandas能够识别值的类型:

代码语言:javascript
复制
df = pandas.read_csv('test.dat', delimiter=r"\s+", names=['col1','col2','col3'])

例如,可以通过以下方式进行检查:

代码语言:javascript
复制
for i, r in df.iterrows():
    print type(r['col1']), type(r['col2']), type(r['col3'])

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

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2013-07-04 18:32:02

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

假设你有一个字符串为'datetime‘的列,那么:

代码语言:javascript
复制
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”列中:

代码语言:javascript
复制
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的指令(即用于不同格式的字母)。

票数 396
EN

Stack Overflow用户

发布于 2015-03-12 00:03:34

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

代码语言:javascript
复制
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函数实际上应该是:

代码语言:javascript
复制
dateparse = lambda dates: [datetime.strptime(d, '%Y-%m-%d').date() for d in dates]
票数 25
EN

Stack Overflow用户

发布于 2017-09-24 20:52:03

您可以按照pandas.read_csv()文档中推荐的方式使用pandas.to_datetime()

如果列或索引包含无法分析的日期,则整个列或索引将原封不动地作为对象数据类型返回。对于非标准的datetime解析,在pd.read_csv之后使用pd.to_datetime

演示:

代码语言:javascript
复制
>>> D = {'date': '2013-6-4'}
>>> df = pd.DataFrame(D, index=[0])
>>> df
       date
0  2013-6-4
>>> df.dtypes
date    object
dtype: object
>>> df['date'] = pd.to_datetime(df.date, format='%Y-%m-%d')
>>> df
        date
0 2013-06-04
>>> df.dtypes
date    datetime64[ns]
dtype: object
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17465045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档