Я использую pandas.merge
, чтобы объединить два кадра данных на основе значений двух столбцов.Я проверил типы данных в обоих фреймах данных, и они одинаковы.Кроме того, для каждого из двух столбцов в обоих наборах данных я рассчитал пересечение между наборами, и оно определенно не пустое.Однако слияние не работает должным образом, и я просто не могу найти причину для этого.
Я опубликую здесь фрагмент кода, хотя у меня нет минимального набора данных для его воспроизведения, данные слишком велики,Существуют наборы данных df
и q0
, оба имеют столбцы permno
date
, и я хочу объединить их на основе.
# just to make sure the data types are the same
df['permno'] = df['permno'].astype(int)
q0['permno'] = q0['permno'].astype(int)
df['date'] = df['date'].dt.to_period('D')
q0['date'] = q0['date'].dt.to_period('D')
print(df.dtypes, q0.dtypes)
Outpit for q0
:
date period[D]
permno int64
sum float64
dtype: object
Вывод для df
:
permno int64
date period[D]
sic int64
prc float64
...
Еще один шаг, который необходимо выполнить, - это пересечение значений столбца:
print(len(set(df.date.unique())&set(q0.date.unique())))
print(len(set(df.permno.unique())&set(q0.permno.unique())))
Выход:
9154
5925
Слияние:
df = pd.merge(df, q0, on=['permno', 'date'], how='inner')
print(len(df))
Выход:
0
Я пробовал это много раз, но не могу понять, почему он не работает сейчас.