当前位置:  开发笔记 > 编程语言 > 正文

parse_dates不适用于默认的日期时间格式

如何解决《parse_dates不适用于默认的日期时间格式》经验,为你挑选了1个好方法。

我将日期时间格式的数据导出到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> jezrael..:

我想,你可以改变True,以['date1']在参数parse_datesread_csv,因为True手段解析index['date1']分析柱date1:

# 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

文件:

parse_dates:boolean,整数或名称列表,列表或dict列表,默认为False

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

infer_datetime_format:boolean,默认为False

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

如果您将列设置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例如:

print df
print df.dtypes

       date1       date2  int1      int2
0 2014-01-01  2014-02-01  2000  20111230
1 2015-01-01  2015-02-01  2014  20151230
date1    datetime64[ns]
date2            object
int1              int64
int2              int64
dtype: object

print 
print in_df
print in_df.dtypes

       date1      date2       int1       int2
0 2014-01-01 2014-02-01 2000-01-01 2011-12-30
1 2015-01-01 2015-02-01 2014-01-01 2015-12-30
date1    datetime64[ns]
date2    datetime64[ns]
int1     datetime64[ns]
int2     datetime64[ns]
dtype: object

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有