Tôi đang cố chuyển đổi chỉ mục của pandas.DataFrame
từ định dạng chuỗi thành chỉ mục ngày giờ, sử dụng pandas.to_datetime()
.pandas.to_datetime định dạng chuỗi thời gian không nhất quán
gấu trúc nhập:
In [1]: import pandas as pd
In [2]: pd.__version__
Out[2]: '0.10.1'
Tạo một ví dụ DataFrame:
In [3]: d = {'data' : pd.Series([1.,2.], index=['26/12/2012', '10/01/2013'])}
In [4]: df=pd.DataFrame(d)
Nhìn vào chỉ số. Lưu ý rằng định dạng ngày là ngày/tháng/năm:
In [5]: df.index
Out[5]: Index([26/12/2012, 10/01/2013], dtype=object)
index Convert to datetime:
In [6]: pd.to_datetime(df.index)
Out[6]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2012-12-26 00:00:00, 2013-10-01 00:00:00]
Length: 2, Freq: None, Timezone: None
Đã ở giai đoạn này, bạn có thể thấy rằng định dạng ngày cho mỗi mục đã được định dạng khác nhau . Việc đầu tiên là tốt, thứ hai đã hoán đổi tháng và ngày.
Đây là những gì tôi muốn viết, nhưng tránh các định dạng phù hợp các chuỗi date:
In [7]: df.set_index(pd.to_datetime(df.index))
Out[7]:
data
2012-12-26 1
2013-10-01 2
Tôi đoán mục đầu tiên là chính xác bởi vì chức năng 'biết' không có 26 tháng, vv không chọn định dạng tháng/ngày/năm mặc định.
Có cách nào khác/tốt hơn để thực hiện việc này không? Tôi có thể chuyển định dạng vào hàm to_datetime()
không?
Cảm ơn bạn.
EDIT:
Tôi đã tìm thấy một cách để làm điều này, mà không pandas.to_datetime:
import datetime.datetime as dt
date_string_list = df.index.tolist()
datetime_list = [ dt.strptime(date_string_list[x], '%d/%m/%Y') for x in range(len(date_string_list)) ]
df.index=datetime_list
nhưng đó là một chút lộn xộn. Mọi cải tiến đều được chào đón.
Cảm ơn @andy. 'Dayfirst' arg hoạt động. Nhưng tôi không thể sử dụng 'định dạng'. 'TypeError: to_datetime() nhận đối số từ khóa không mong muốn 'format''. Nên có sẵn trong phiên bản gấu trúc tôi đang sử dụng (0.10.1)? –
@ random.me ah Xin lỗi. Nó sẽ không được, tôi đã làm việc trong dev (vì vậy nó sẽ là 0,11)! –
Cảm ơn bạn điều này đã hữu ích. Tôi đang làm việc trên phiên bản 0,15 và gấu trúc vẫn còn bị nhầm lẫn nếu tôi không ăn trong tham số 'dayfirst = True' để giới thiệu' định dạng' rõ ràng đã không giúp đỡ. – Rhubarb