Итак, я студент, изучающий данные, работающий с некоторыми данными в Python Pandas, и у меня есть два фрейма данных, индексы которых являются датами (каждый генерируется чтением файлов CSV с pandas .readcsv ("filepath") , index_col = "DATE", parse_dates = True, dayfirst = True)). Я хочу изменить эти фреймы данных таким образом, чтобы они содержали только строки, значения индекса которых являются общими для обоих. Таким образом, я могу напрямую сравнивать их для поиска корреляций в данных.
I Последние несколько часов я потратил на поиск документации и SO, чтобы найти способы сделать это, и на данный момент у меня есть следующий код:
common_dates = list(set(df1.index.values).intersection(df2.index.values))
print(common_dates)
print(normalized_house_index_data.index.values)
df1= df1.take(common_dates)
df2= df2.take(common_dates)
Однако, это дает мне индекс вне границ ошибка, даже если общие_даты должны быть созданы из элементов в массиве index.values. Когда я смотрю на вывод операторов print (), которые я добавил как часть моего устранения неполадок, я вижу следующее для common_dates:
[numpy.datetime64('2000-12-31T00:00:00.000000000'), numpy.datetime64('2001-12-31T00:00:00.000000000'), numpy.datetime64('2004-12-31T00:00:00.000000000'), numpy.datetime64('2003-12-31T00:00:00.000000000'), #and more values
И следующее для df1.index.values:
['2000-12-31T00:00:00.000000000' '2001-12-31T00:00:00.000000000'
'2002-12-31T00:00:00.000000000' '2003-12-31T00:00:00.000000000' #and more values
Значения для df2.index.values выглядят аналогично df1.
['1947-12-31T00:00:00.000000000' '1948-12-31T00:00:00.000000000'
#lots of values
'1997-12-31T00:00:00.000000000' '1998-12-31T00:00:00.000000000'
'1999-12-31T00:00:00.000000000' '2000-12-31T00:00:00.000000000'
'2001-12-31T00:00:00.000000000' '2002-12-31T00:00:00.000000000'
#more values
Это выдает ошибку «индексы вне границ». Я пытался использовать list (map (str, common_dates) для преобразования common_dates в строки, поскольку похоже, что может быть какое-то несоответствие типов, но это дает «недопустимый литерал для int () с основанием 10: '2000- 12-31T00: 00: 00.000000000 '"вместо этого; я попытался аналогичным образом преобразовать их в int или numpy .datetime64, но оба они дают ошибки" index out of bounds ".
У меня есть также попробовал альтернативный подход с использованием df1.iterrows ():
droplist = []
for date, value in df1.iterrows():
if date not in common_dates:
droplist.append(date)
df1= df1.drop(droplist)
Я также попробовал версию этого, сравнивая дату каждой строки непосредственно со значениями df2.index.values. Оба они просто приводят ко всем строки удаляются из таблицы, а не только несоответствующие строки удаляются.
Что я делаю не так, здесь? Я просто неверный подход к этому, или я что-то упускаю