合并两个数据框的功能

时间:2018-12-21 18:17:51

标签: python pandas dataframe

我想编写一个函数来合并两个数据框架国家/地区的数据以及任何给定年份的排放量。

  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 :(得分:0)

合并时,您的emissions数据框没有列country code

尝试

result=pd.merge(countries, emissions[["country code","yearString"]], on="country code").drop("country code", axis=1)

答案 1 :(得分:0)

没有太多有关数据的信息,这就是我可以解决的。我认为问题出在emissions[yearString]而不是使用单括号。给定一些随机生成的DataFrame,这是我可以做的:

import numpy as np
import pandas as pd

首先,我创建了两个随机数的DataFrame,在您的实例中有些可能是字符串,但这只是一种快速替代。

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

我调用了要合并的特定列,包括年份和psuedo-emissions列。我在这里使用双括号来调用列列表,以便合并仍可以在两个DataFrame中访问“年”。<​​/ p>

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

如果数据帧的拆分方式与此不同,请告诉我,我将尝试对其进行更改,以便对您的解决方案更有意义。

答案 2 :(得分:0)

或者,也许您不需要合并,只需添加年份列:

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