pandas.read_csv中parse_date = [0]和parse_date = True之间的差异

时间:2012-08-27 07:53:23

标签: pandas

此代码:

import pandas as pd
from StringIO import StringIO

data = "date,c1\n2012-07-31 02:00,1.1\n2012-07-31 02:15,2.2\n2012-07-31 02:30,3.3\n"

df1 = pd.read_csv(StringIO(data),parse_dates=True).set_index(('date'))
df2 = pd.read_csv(StringIO(data),parse_dates=[0] ).set_index(('date'))

print "df1:\n{index}".format(index=df1.index)
print "df2:\n{index}".format(index=df2.index)

返回:

df1:
array([2012-07-31 02:00, 2012-07-31 02:15, 2012-07-31 02:30], dtype=object)
df2:
<class 'pandas.tseries.index.DatetimeIndex'>
[2012-07-31 02:00:00, ..., 2012-07-31 02:30:00]
Length: 3, Freq: None, Timezone: None

df1和df2之间的区别是错误,功能,还是我误解了什么?

2 个答案:

答案 0 :(得分:3)

对我来说看起来像个错误。我为此创建了issue

请注意,通过使用* index_col *参数,可以设置索引。

In [15]: df = pd.read_csv(StringIO(data),parse_dates=[0], index_col=0)

In [15]: df.index
<class 'pandas.tseries.index.DatetimeIndex'>
[2012-07-31 02:00:00, ..., 2012-07-31 02:30:00]
Length: 3, Freq: None, Timezone: None

答案 1 :(得分:1)

如果parse_dates=True,读者将尝试将索引解析为日期时间(请参阅文档:http://pandas.pydata.org/pandas-docs/stable/io.html)。由于您没有在原始调用中设置索引,因此它没有尝试解析它。

这将有效:

In [237]: df1 = pd.read_csv(StringIO(data),parse_dates=True, index_col=0)

In [238]: df1
Out[238]: 
                      c1
date                    
2012-07-31 02:00:00  1.1
2012-07-31 02:15:00  2.2
2012-07-31 02:30:00  3.3

In [239]: df1.index
Out[239]: 
<class 'pandas.tseries.index.DatetimeIndex'>
[2012-07-31 02:00:00, ..., 2012-07-31 02:30:00]
Length: 3, Freq: None, Timezone: None