parse_dates不能使用默认的日期时间格式

时间:2016-01-05 05:05:10

标签: date csv pandas

我将日期时间格式的数据导出到csv。当我将其导回时,我需要能够在没有任何列名或列号引用的情况下以日期读取数据。

看起来Pandas read_csv有自动将日期解析为日期时间格式的选项,但它似乎并没有在这里工作。

# Create date data
df_list = [['2014-01-01','2014-02-01'],['2015-01-01','2015-02-01']]
df = pd.DataFrame(df_list,columns=['date1','date2'])

# Convert to datetime format
df['date1'] = pd.to_datetime(df['date1']) 

# Export to csv
df.to_csv('_csv_file.csv',index=False)

# Read in the data and parse dates
in_df = pd.read_csv('_csv_file.csv',parse_dates=True,infer_datetime_format=True)

# Dates are not of correct type
print df.dtypes
print 
print in_df.dtypes

Out [1]:

date1    datetime64[ns]
date2            object
dtype: object

date1    object
date2    object
dtype: object

有没有办法在导入时自动解析日期列而不明确标识列名称或位置?

1 个答案:

答案 0 :(得分:7)

我认为您可以在read_csv的参数True中将['date1']更改为parse_dates,因为True表示正在解析index和{{1}解析列['date1']

date1

Docs

  

parse_dates :布尔值,整数或名称列表,列表或dict列表,默认为False

     

如果为真 - >尝试解析索引。如果[1,2,3] - >尝试将第1,2,3列分别解析为单独的日期列。如果[[1,3]] - >将第1列和第3列组合在一起并解析为单个日期列。 {'foo':[1,3]} - >将列1,3解析为日期并调用结果'foo'为iso8601格式的日期存在快速路径。

     

infer_datetime_format :布尔值,默认为False

     

如果为列启用了True和parse_dates,请尝试推断日期时间格式以加快处理速度

如果将列# Read in the data and parse dates in_df = pd.read_csv('_csv_file.csv', parse_dates=['date1'], infer_datetime_format=True ) #second solution #instead column name - number of column #in_df = pd.read_csv('_csv_file.csv',parse_dates=[0], infer_datetime_format=True ) # Dates are not of correct type print df.dtypes print print in_df.dtypes date1 datetime64[ns] date2 object dtype: object date1 datetime64[ns] date2 object dtype: object 设置为索引,则可以正常工作:

date1

编辑:

如果要将所有列解析为# Read in the data and parse dates in_df = pd.read_csv('_csv_file.csv', parse_dates=True, infer_datetime_format=True, index_col='date1' ) # Dates are not of correct type print print in_df.dtypes print in_df.index date2 object dtype: object DatetimeIndex(['2014-01-01', '2015-01-01'], dtype='datetime64[ns]', name=u'date1', freq=None) ,您可以按参数datetime的列数指定所有列:

parse_dates

但可能存在错误 - 某些in_df = pd.read_csv('_csv_file.csv', parse_dates=[0, 1, 2, 3]) 可以解析为integers,例如:

datetimes