我有下面的代码,它是有效的。这基本上是重命名列中的值,以便以后合并它们。
pop = pd.read_csv('population.csv')
pop_recent = pop[pop['Year'] == 2014]
mapping = {
'Korea, Rep.': 'South Korea',
'Taiwan, China': 'Taiwan'
}
f= lambda x: mapping.get(x, x)
pop_recent['Country Name'] = pop_recent['Country Name'].map(f)
Warning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy pop_recent['Country Name'] = pop_recent['Country Name'].map(f)
我用谷歌搜索了这个!但似乎没有使用地图的例子,所以我不知所措。。。
我建议您在
pop_recent = pop[pop['Year'] == 2014]
中重置索引。如果要对dataframe的某列应用某些函数,请尝试使用dataframe API的函数^{} 。简单演示:
输出:
问题在于chained indexing,实际上您要做的是将值设置为-
pop[pop['Year'] == 2014]['Country Name']
-这在大多数情况下都不起作用(在链接的文档中解释得很好),因为这是两个不同的调用,其中一个调用可能返回数据帧的副本(我相信布尔索引)返回数据帧的副本。因此,当您尝试设置该副本的值时,它不会反映在原始数据帧中。示例-
如前所述,您应该使用
DataFrame.loc
来索引要在单个调用中更新的行和列,而不是链式索引,从而避免此错误。示例-或者,如果这对您来说太长,您可以预先创建一个掩码(boolean dataframe)并分配给一个变量,并在上面的语句中使用它。示例-
演示-
使用掩码方法演示-
相关问题 更多 >
编程相关推荐