簡體   English   中英

Pandas read_csv無法將ISO8601識別為datetime dtype

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM