我有一个跨越数年的数据框,某些时候他们更改了种族的代码。因此,我需要根据年份重新编码值 - 这是同一数据框中的另一列。例如,1变成3,2变成3,3变成4等等:
old = [1, 2, 3, 4, 5, 91]
new = [3, 3, 4, 2, 1, 6]
这只针对1996年到2001年的数据进行处理,不得更改同一列(族裔)中其他年份的数值。为避免过多低效循环,我尝试了以下方法:
recode_years = range(1996,2002)
for year in recode_years:
df['ethnicity'][df.year==year].replace(old, new, inplace=True)
但数据框中的原始值并未改变。 replace方法本身正确地替换并返回了新的值,但是在应用条件时,inplace选项似乎不会影响原始数据框。这对经验丰富的Pandas用户可能很明显,但肯定有一些简单的方法来代替遍历每个单独元素吗?
编辑(x2):这里是另一种方法的示例,也没有起作用(“替换的长度必须等于系列长度”和“TypeError:数组不能安全地转换为所需类型”):
oldNewMap = {1:2, 2:3}
df2 = DataFrame({"year":[2000,2000,2000,2001,2001,2001],"ethnicity":[1,2,1,2,3,1]})
df2['ethnicity'][df2.year==2000] = df2['ethnicity'][df2.year==2000].map(oldNewMap)
编辑:看起来这似乎是安装/版本特定的问题,因为在我的另一台电脑上它可以正常工作。
df.ix[df.year==year, 'ethnicity']
访问元素? - BrenBarn