3

这段代码:

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 之间的差异是错误、功能还是我误解了什么?

4

2 回答 2

3

对我来说似乎是一个错误。我为此创建了一个问题

请注意,通过使用 *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
于 2012-08-27T10:20:06.183 回答
2

如果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
于 2012-08-27T12:02:14.740 回答