我将日期时间格式的数据导出到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
有没有办法在导入时自动解析日期列而不明确标识列名称或位置?
我想,你可以改变True
,以['date1']
在参数parse_dates
中read_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