Điều này đã khiến cho cuộc sống của tôi bị cấm trong vài ngày qua. Tôi có rất nhiều Pandas Dataframes chứa dữ liệu chuỗi thời gian với tần số không đều. Tôi cố gắng sắp xếp chúng thành một khung dữ liệu duy nhất.Pandas sắp xếp nhiều khung dữ liệu với chỉ mục TimeStamp
Dưới đây là một số mã, với dataframes đại diện, df1
, df2
, và df3
(Tôi thực sự có n = 5, và sẽ đánh giá cao một giải pháp mà sẽ làm việc cho tất cả n>2
):
# df1, df2, df3 are given at the bottom
import pandas as pd
import datetime
# I can align df1 to df2 easily
df1aligned, df2aligned = df1.align(df2)
# And then concatenate into a single dataframe
combined_1_n_2 = pd.concat([df1aligned, df2aligned], axis =1)
# Since I don't know any better, I then try to align df3 to combined_1_n_2 manually:
combined_1_n_2.align(df3)
error: Reindexing only valid with uniquely valued Index objects
Tôi có một ý tưởng tại sao tôi nhận được lỗi này, vì vậy tôi thoát khỏi các chỉ số trùng lặp trong combined_1_n_2
và thử lại:
combined_1_n_2 = combined_1_n_2.groupby(combined_1_n_2.index).first()
combined_1_n_2.align(df3) # But stll get the same error
error: Reindexing only valid with uniquely valued Index objects
tại sao tôi nhận được lỗi này? Ngay cả khi điều này làm việc, nó là hoàn toàn bằng tay và xấu xí. Làm thế nào tôi có thể sắp xếp> 2 chuỗi thời gian và kết hợp chúng trong một khung dữ liệu duy nhất?
dữ liệu:
df1 = pd.DataFrame({'price' : [62.1250,62.2500,62.2375,61.9250,61.9125 ]},
index = [pd.DatetimeIndex([datetime.datetime.strptime(s, '%Y-%m-%d %H:%M:%S.%f')])[0]
for s in ['2008-06-01 06:03:59.614000', '2008-06-01 06:03:59.692000',
'2008-06-01 06:15:42.004000', '2008-06-01 06:15:42.083000','2008-06-01 06:17:01.654000' ] ])
df2 = pd.DataFrame({'price': [241.0625, 241.5000, 241.3750, 241.2500, 241.3750 ]},
index = [pd.DatetimeIndex([datetime.datetime.strptime(s, '%Y-%m-%d %H:%M:%S.%f')])[0]
for s in ['2008-06-01 06:13:34.524000', '2008-06-01 06:13:34.602000',
'2008-06-01 06:15:05.399000', '2008-06-01 06:15:05.399000','2008-06-01 06:15:42.082000' ] ])
df3 = pd.DataFrame({'price': [67.656, 67.875, 67.8125, 67.75, 67.6875 ]},
index = [pd.DatetimeIndex([datetime.datetime.strptime(s, '%Y-%m-%d %H:%M:%S.%f')])[0]
for s in ['2008-06-01 06:03:52.281000', '2008-06-01 06:03:52.359000',
'2008-06-01 06:13:34.848000', '2008-06-01 06:13:34.926000','2008-06-01 06:15:05.321000' ] ])
Cảm ơn bạn, điều đó thật đáng ngạc nhiên; do đó, 'align()' là không cần thiết nếu tôi làm chuỗi tham gia? – Rhubarb
Đúng, 'join' xử lý logic chỉ mục cho bạn. – chrisb
Cảm ơn bạn, vì tò mò: bạn có thể chỉ mô tả ngắn gọn về thời điểm một người có thể cần sử dụng align() sau đó không? Bởi vì với tôi có vẻ như join() xử lý cả sự liên kết và ghép nối trong một lần. – Rhubarb