#python #pandas #dataframe #merge
#python #pandas #фрейм данных #слияние
Вопрос:
Я пытался правильно использовать pd.merge
функцию, но либо получаю сообщение об ошибке, либо форматирую таблицу так, как мне не нравится. Я просмотрел документацию, но не могу найти способ объединить только определенный столбец. Например, допустим, я работаю с этими двумя фреймами данных.
df_1 = county_name accidents pedestrians
ADAMS 1 2
ALLEGHENY 1 3
ARMSTRONG 3 4
BEDFORD 1 1
df_2 = county_name population
ADAMS 102336
ALLEGHENY 1223048
ARMSTRONG 65642
BEDFORD 166140
BERKS 48480
BLAIR 417854
BRADFORD 123457
BUCKS 60853
CAMBRIA 628341
Результат, который я ищу, примерно такой. Где названия округов добавляются в столбец ‘county_name’, но не дублируются, а столбец ‘population’ не отображается.
df_outcome = county_name accidents pedestrians
ADAMS 1 2
ALLEGHENY 1 3
ARMSTRONG 3 4
BEDFORD 1 1
BERKS Nan Nan
BLAIR Nan Nan
BRADFORD Nan Nan
BUCKS Nan Nan
CAMBRIA Nan Nan
Наконец, я планирую использовать df_outcome.fillna(0)
для замены всех Nan
значений нулем.
Комментарии:
1. можете ли вы скопировать данные и вставить в виде текста? изображения не могут быть скопированы и, следовательно, не могут быть воспроизведены
2. @anky извините, что я перепечатал как текст
Ответ №1:
Отфильтруйте столбец county_name
и используйте merge
с левым соединением:
df = df_2[['county_name']].merge(df_1, how='left')
print (df)
county_name accidents pedestrians
0 ADAMS 1.0 2.0
1 ALLEGHENY 1.0 3.0
2 ARMSTRONG 3.0 4.0
3 BEDFORD 1.0 1.0
4 BERKS NaN NaN
5 BLAIR NaN NaN
6 BRADFORD NaN NaN
7 BUCKS NaN NaN
8 CAMBRIA NaN NaN
Комментарии:
1. @anky_91 Это действительно работает, но данные из df_1 теперь все NaN
2. @prime90 — Для меня хорошая работа, в столбце нет пробелов для отслеживания
county_name
? Проверьте это с помощьюprint(df1['county_name'].tolist()[:20])
3. @anky_91 Странно, что я получаю,
ValueError: Cannot convert non-finite values (NA or inf) to integer
тип данных столбца population равен anint
, поэтому я изменил его наfloat
и получаю пустые скобки списка[]
4. @prime90 — Каков ваш код? Можете ли вы отредактировать вопрос?
5. @anky_91 Я получал ошибку в своем коде из предыдущей правки, я забыл, что мне нужно изменить обратно. Спасибо. Это отлично сработало. Я понятия не имел, что вам нужно использовать двойные скобки для доступа к определенному столбцу. Спасибо!
Ответ №2:
Попробуйте:
df = pd.merge(df1,df2[['county_name']], how='left')
Комментарии:
1. @jezrael Если вы считаете, что это плагиат, вам следует установить флажок mod. Ответ не является низкокачественным
2. @Machavity — У меня отрицательный опыт, все мои флаги (2 раза) были отклонены … 🙁