pandas python chuyển đổi chỉ mục thành datetime


80

Làm cách nào để chuyển đổi chỉ số chuỗi gấu trúc sang định dạng ngày giờ

khung dữ liệu 'df' của tôi như thế này

                     value          
2015-09-25 00:46    71.925000
2015-09-25 00:47    71.625000
2015-09-25 00:48    71.333333
2015-09-25 00:49    64.571429
2015-09-25 00:50    72.285714

nhưng chỉ mục thuộc loại chuỗi, nhưng tôi cần nó ở định dạng ngày giờ vì tôi gặp lỗi

'Index' object has no attribute 'hour'

khi đang sử dụng

 df['A'] = df.index.hour

6
df.index.to_datetime()hoặc df.index = pandas.to_datetime(df.index)(trước đây không được dùng nữa).
2016

type (df.index [1]) vẫn trả về 'str'
Runner Bean

1
Dữ liệu trên datetimekhông có vấn đề gì - type(df.index[1]) == pandas.tslib.Timestamp. Bạn có dữ liệu xấu trong phần còn lại của khung dữ liệu không?
2016

1
Bạn cũng có thể chỉ định định dạng và kwag lỗi. Tài liệu của pandas.to_datetimesẽ giải thích phần còn lại.
Kartik

Câu trả lời:


109

Nó sẽ hoạt động như mong đợi. Hãy thử chạy ví dụ sau.

import pandas as pd
import io

data = """value          
"2015-09-25 00:46"    71.925000
"2015-09-25 00:47"    71.625000
"2015-09-25 00:48"    71.333333
"2015-09-25 00:49"    64.571429
"2015-09-25 00:50"    72.285714"""

df = pd.read_table(io.StringIO(data), delim_whitespace=True)

# Converting the index as date
df.index = pd.to_datetime(df.index)

# Extracting hour & minute
df['A'] = df.index.hour
df['B'] = df.index.minute
df

#                          value  A   B
# 2015-09-25 00:46:00  71.925000  0  46
# 2015-09-25 00:47:00  71.625000  0  47
# 2015-09-25 00:48:00  71.333333  0  48
# 2015-09-25 00:49:00  64.571429  0  49
# 2015-09-25 00:50:00  72.285714  0  50

3

Bạn có thể tạo một cách rõ ràngDatetimeIndex khi khởi tạo dataframe. Giả sử dữ liệu của bạn ở định dạng chuỗi

data = [
    ('2015-09-25 00:46', '71.925000'),
    ('2015-09-25 00:47', '71.625000'),
    ('2015-09-25 00:48', '71.333333'),
    ('2015-09-25 00:49', '64.571429'),
    ('2015-09-25 00:50', '72.285714'),
]

index, values = zip(*data)

frame = pd.DataFrame({
    'values': values
}, index=pd.DatetimeIndex(index))

print(frame.index.minute)

FYI cho Python3, bạn cầnindex, values = zip(*data.items())
Addison Klinke

2

Tôi chỉ đưa ra tùy chọn khác cho câu hỏi này - bạn cần sử dụng '.dt' trong mã của mình:

import pandas as pd

df.index = pd.to_datetime(df.index)

#for get year
df.index.dt.year

#for get month
df.index.dt.month

#for get day
df.index.dt.day

#for get hour
df.index.dt.hour

#for get minute
df.index.dt.minute

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.