Функция для объединения двух фреймов данных - PullRequest
0 голосов
/ 21 декабря 2018

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

  def mergeByYear(year):
    yearString = str(year)
    result = pd.merge(countries, emissions[yearString], on='Country Code')
    return 

Пользователь вводит год, и функция объединяет фрейм данных в соответствии с годом.Мой пример данных:

Country Name    Country Code    Indicator Name  Indicator Code  1960    1961    1962    1963    1964    1965    
0   Aruba   ABW CO2 emissions (metric tons per capita)  EN.ATM.CO2E.PC  NaN NaN NaN NaN NaN NaN

Но вышеприведенная функция выдает мне ошибку "не может объединить DataFrame с экземпляром типа"

Может кто-нибудь сказать мне, как решить эту проблему ??

Ответы [ 3 ]

0 голосов
/ 21 декабря 2018

Не слишком много информации о данных, вот что я мог бы решить.Я считаю, что проблема заключается в использовании одинарных скобок, а не двойных скобок для emissions[yearString].Учитывая некоторые случайно сгенерированные DataFrames, вот что я мог сделать:

import numpy as np
import pandas as pd

Сначала я создал два DataFrames со случайными числами, некоторые из которых, вероятно, будут строками в вашем экземпляре, но это просто быстрая замена.

df = pd.DataFrame(np.arange(0, 100, 5).reshape(4,5), columns = ['Year',2,3,4,5])

Создан один столбец в качестве столбца псевдо-выбросов.

df2 = pd.DataFrame(np.arange(0, 200, 10).reshape(4,5), columns = ['Emissions',7,8,9,10])

Добавлены данные года во второй DataFrame, который мы затем можем использовать для объединения с первым

df2['Year'] = [0, 25, 50, 75] #Used to add year data to the second data Frame

Я назвал конкретные столбцы, которые я хотел объединить, включая год и столбец псевдо-выбросов.Я использовал здесь двойные скобки для вызова списка столбцов, чтобы слияние могло по-прежнему иметь доступ к «Году» в обоих фреймах данных.

pd.merge(df, df2[['Year', 'Emissions']], on = 'Year')

Если фреймы данных разделены по-другому, дайте мне знать, и я постараюсьизменить его, чтобы оно имело больше смысла для вашего решения.

0 голосов
/ 21 декабря 2018

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

def addYear(countries, emissions, year):
    yearString = str(year)
    countries[yearString] = countries['Country Code'].map(emissions.set_index('Country Code')[yearString])
    return countries

Другой вариант, если вы хотите сохранить фрейм данных вашей страны:

def addYear(countries, emissions, year):
    yearString = str(year)
    result = countries.copy()
    result[yearString] = result['Country Code'].map(emissions.set_index('Country Code')[yearString])
    return result
0 голосов
/ 21 декабря 2018

Когда вы объединяетесь, ваш emissions фрейм данных не имеет столбца country code.

Попробуйте

result=pd.merge(countries, emissions[["country code","yearString"]], on="country code").drop("country code", axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...