我想编写一个函数来合并两个数据框架国家/地区的数据以及任何给定年份的排放量。
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与类型为“
的实例合并谁能告诉我如何解决此问题?
答案 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