В настоящее время я работаю над проектом больших данных, требующим объединения нескольких файлов в одну таблицу, которую можно проанализировать с помощью 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 и перезагрузить его в программу, после чего слияние снова заработало.