Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 解析';无法使用默认的日期时间格式_Date_Csv_Pandas - Fatal编程技术网

Date 解析';无法使用默认的日期时间格式

Date 解析';无法使用默认的日期时间格式,date,csv,pandas,Date,Csv,Pandas,我正在将日期时间格式的数据导出到csv。当我重新导入时,我需要能够在没有任何列名或列号引用的情况下以日期的形式读取数据 看起来Pandas read_csv有自动将日期解析为datetime格式的选项,但在这里似乎不起作用 # 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']

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

看起来Pandas read_csv有自动将日期解析为datetime格式的选项,但在这里似乎不起作用

# 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

是否有任何方法可以在导入时自动解析日期列而不显式标识列名或位置?

我认为您可以在的参数
parse_dates
中将
True
更改为
['date1']
,因为
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
:

解析日期:布尔值,整数或名称列表,列表列表或dict,默认为False

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

推断日期时间格式:布尔值,默认为False

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

如果将列
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])
但也可能有错误-一些
整数可以解析为
日期时间
,例如:

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

这是一个很好的解释,所以如果没有其他问题出现,我会接受它,但问题之一是我无法提前知道哪些列将是日期,所以我希望找到一些东西来自动检测和分析日期列。嗯,有些列是
数值的
还是
日期时间的
类型?或者所有列都是
string
datetime
类型?您必须明确地告诉熊猫哪些列被视为datetime,这是因为可以将数字值解析为历元时间,或者将20150110等值解析为字符串以及2015-01-10