Python: объединение pandas фреймов данных приводит только к NaN в столбце - PullRequest
1 голос
/ 31 января 2020

В настоящее время я работаю над проектом больших данных, требующим объединения нескольких файлов в одну таблицу, которую можно проанализировать с помощью SAS. Большая часть работы завершена с окончательными таблицами фактов, которые необходимо добавить к окончательному результату.

Я столкнулся с проблемой при попытке объединить таблицу фактов с окончательным результатом. В этом файле csv, который был загружен в его собственный фрейм данных, присутствуют следующие столбцы:

table name: POP
year | Borough | Population

в наборе данных, к которому они должны быть присоединены, эти поля также существуют вместе с примерно 26 другими. При первой попытке объединения через следующую строку:

#Output = pd.merge(Output, POP, on=['year', 'Borough'], how='outer')

была возвращена следующая ошибка

ValueError: Вы пытаетесь объединить столбцы объекта и int64. Если вы хотите sh продолжить, вы должны использовать pd.concat

Я понял, что это просто несоответствие типов данных, и добавил следующую строку перед командой объединения:

POP['year'] = POP['year'].astype(object)

это позволяет выполнить программу «успешно», однако в выходном файле есть столбец заполненности, но он заполняется NaN, когда в нем должна быть соответствующая совокупность для каждой строки, где есть комбинация «год». "и" совпадение ", найденное в таблице POP.

любая помощь будет принята с благодарностью, и я предоставлю ниже более полную выдержку из кода для тех, кому легче анализировать:

import pandas as pd


#
# Add Population Data
#

#rename columns for easier joining
POP.rename(columns={"Area name":"Borough"}, inplace=True)
POP.rename(columns={"Persons":"Population"}, inplace=True)
POP.rename(columns={"Year":"year"}, inplace=True)

#convert type of output column to allow join
POP['year'] = POP['year'].astype(object)


#add to output file
Output = pd.merge(Output, POP, on=['year', 'Borough'], how='outer')

Кроме того, найдите ниже некоторую информацию о типах данных и Форма элементов и таблиц, используемых в случае его использования:

> Output table info
> 
> <class 'pandas.core.frame.DataFrame'> Int64Index: 34241 entries, 0 to
> 38179 Data columns (total 2 columns): year       34241 non-null object
> Borough    34241 non-null object dtypes: object(2) memory usage:
> 535.0+ KB None table shape: (34241, 36)
> ----------
> 
> POP table info <class 'pandas.core.frame.DataFrame'> RangeIndex: 357
> entries, 0 to 356 Data columns (total 3 columns): year          357
> non-null object Borough       357 non-null object Population    357
> non-null object dtypes: object(3) memory usage: 4.2+ KB None table
> shape: (357, 3)

наконец, мои извинения, если что-либо из этого будет задано или представлено неправильно, я относительно новичок в python и это мой первый время использования стека в качестве участника 1034 *

[357 rows x 3 columns]
                  Borough       Date  totalIncidents  Calculated Mean Closure  \
0                  Camden 2013-11-06             2.0                    613.5   
1  Kensington and Chelsea 2013-11-06             NaN                      NaN   
2             Westminster 2013-11-06             1.0                    113.0   

   PM2.5 (ug/m3)  PM10 (ug/m3) (R)  SO2 (ug/m3) (R)  CO (mg m-3) (R)  \
0           9.55            16.200              5.3              NaN   
1          10.65            21.125              1.7              0.2   
2          19.90            30.600              NaN              0.7   

   NO (ug/m3) (R)  NO2 (ug/m3) (R)  O3 (ug/m3) (R)  Bus Stops  \
0      135.866670        82.033333            24.4      447.0   
1       80.360000        65.680000            29.3      270.0   
2      171.033333       109.000000            21.3      489.0   

   Cycle Parking Points  \
0                  67.0   
1                  27.0   
2                  45.0   

   Average Public Transport Access Index 2015 (AvPTAI2015)  \
0                                          24.316782         
1                                          23.262691         
2                                          39.750796         

  Public Transport Accessibility Levels (PTAL) Catagorisation  \
0                                                  5            
1                                                  5            
2                                                 6a            

   Underground Stations in Borough  \
0                             16.0   
1                             12.0   
2                             31.0   

  PM2.5 Daily Air Quality Index(DAQI) classification  \
0                                                Low   
1                                                Low   
2                                                Low   

   PM2.5 Above WHO 24hr mean Guidline  PM10 Above WHO 24hr mean Guidline  \
0                                 0.0                                0.0   
1                                 0.0                                0.0   
2                                 0.0                                0.0   

   O3 Above WHO 8hr mean Guidline*  NO2 Above WHO 1hr mean Guidline*  \
0                              1.0                               1.0   
1                              1.0                               1.0   
2                              1.0                               1.0   

   SO2 Above WHO 24hr mean Guidline  SO2 Above EU 24hr mean Allowence  \
0                               0.0                               0.0   
1                               0.0                               0.0   
2                               0.0                               0.0   

   NO2 Above EU 24hr mean Allowence  CO Above EU 8hr mean Allowence  \
0                               1.0                             0.0   
1                               1.0                             0.0   
2                               1.0                             0.0   

   O3 Above EU 8hr mean Allowence  year  NO2 Year Mean (ug/m3)  \
0                             0.0  2013              50.003618   
1                             0.0  2013              50.003618   
2                             0.0  2013              50.003618   

   PM2.5 Year Mean (ug/m3)  PM10 Year Mean (ug/m3)  \
0                15.339228               24.530299   
1                15.339228               24.530299   
2                15.339228               24.530299   

   NO2 Above WHO Annual mean Guidline  NO2 Above EU Annual mean Allowence  \
0                                 0.0                                 1.0   
1                                 0.0                                 1.0   
2                                 0.0                                 1.0   

   PM2.5 Above EU Annual mean Allowence  PM10 Above EU Annual mean Allowence  \
0                                   0.0                                  0.0   
1                                   0.0                                  0.0   
2                                   0.0                                  0.0   

  Number of Bicycle Hires (All Boroughs)  
0                                 18,431  
1                                 18,431  
2                                 18,431 

вот кадр данных о населении

   year               Borough Population
0  2010  Barking and Dagenham   182,838 
1  2011  Barking and Dagenham   187,029 
2  2012  Barking and Dagenham   190,560 

edit (2): так что это похоже на проблему с типом даты, но я до сих пор не совсем уверен, почему, поскольку я пытался переписать типы данных. Тем не менее, решение, которое меня окончательно заставило, состояло в том, чтобы сохранить выходной фрейм данных в виде csv и перезагрузить его в программу, после чего слияние снова заработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...