[英]Pandas read_csv not recognizing ISO8601 as datetime dtype
目前我使用pandas將csv文件讀入DataFrame
,使用第一列作為索引。 第一列是ISO 8601格式,因此根據read_csv的文檔,它應該被識別為日期時間:
In [1]: import pandas as pd
In [2]: df = pd.read_csv('data.csv', index_col=0)
In [3]: print df.head()
U V Z Ubar Udir
2014-11-01 00:00:00 0.73 -0.81 0.46 1.0904 317.97
2014-11-01 01:00:00 1.26 -1.50 0.32 1.9590 319.97
2014-11-01 02:00:00 1.50 -1.80 0.13 2.3431 320.19
2014-11-01 03:00:00 1.39 -1.65 0.03 2.1575 319.89
2014-11-01 04:00:00 0.94 -1.08 -0.03 1.4318 318.96
但是,在查詢索引dtype時,它返回'object':
In [4]: print df.index.dtype
object
然后我必須手動將其轉換為datetime dtype:
In [5]: df.index = pd.to_datetime(df.index)
In [6]: print df.index.dtype
datetime64[ns]
有沒有辦法在調用read_csv()
時自動將索引設置為datetime read_csv()
?
我剛剛在csv文件中添加了第一列的列名。
Date U V Z Ubar Udir
0 2014-11-01 00:00:00 0.73 -0.81 0.46 1.0904 317.97
1 2014-11-01 01:00:00 1.26 -1.50 0.32 1.9590 319.97
2 2014-11-01 02:00:00 1.50 -1.80 0.13 2.3431 320.19
3 2014-11-01 03:00:00 1.39 -1.65 0.03 2.1575 319.89
4 2014-11-01 04:00:00 0.94 -1.08 -0.03 1.4318 318.96
df = pd.read_csv(input_file)
df.index = pd.to_datetime(df['Date'], format='%Y-%m-%d %H:%M:%S')
如果要刪除日期列,可以使用
df = df.drop('Date', 1)
read_csv文檔描述了parse_dates參數:
parse_dates:boolean或整數或名稱列表或列表或dict列表,默認為False
- 布爾值。 如果為True - >嘗試解析索引。
- 整數或名稱列表。 例如,如果[1,2,3] - >嘗試將每個列1,2,3解析為一個單獨的日期列。
- 列表清單。 例如,如果[[1,3]] - >將第1列和第3列組合在一起並解析為單個日期列。
- dict,例如{'foo':[1,3]} - >將第1,3列解析為日期並調用結果'foo'
注意:iso8601格式的日期存在快速路徑。
由於您要解析索引,您可以使用:
import pandas as pd
df = pd.read_csv('data.csv', index_col=0, parse_dates=True)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.