在大Pandas中记录多个变量

2024-04-25 22:02:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,其中一些变量的值几乎相同。我需要重新编码。有没有比我想出的更有效的方法?例如,在下面的示例中,如果var3、var4和var10等于“A”、“B”、“C”、“D”,则需要将它们重新编码为1、2、3、4。在

testdata = [{'var1' : 'A', 'var3' : 'B', 'var4' : 'C', 'var10' : 'C'}, 
            {'var1' : 'C', 'var3' : 'D', 'var4' : 'A', 'var10' : 'B'}, 
            {'var1' : 'D', 'var3' : 'B', 'var4' : 'B', 'var10' : 'A'}
           ]

df3 = pd.DataFrame(testdata)

cols = df3.columns[1:]

for c in cols:
    df3[c][df3[c] == 'A'] = 1
    df3[c][df3[c] == 'B'] = 2
    df3[c][df3[c] == 'C'] = 3
    df3[c][df3[c] == 'D'] = 4

Tags: columns数据方法示例dataframe编码fortestdata
2条回答

为了完整起见,您可以stack,然后替换为Series.map。在

repl_dict = {'A' : 1,'B' : 2,'C' : 3,'D' : 4}
(df3.set_index('var1')
    .stack()
    .map(repl_dict)
    .unstack()
    .reset_index()
)

  var1  var10  var3  var4
0    A      3     2     3
1    C      2     4     1
2    D      1     2     2

或者,使用pd.factorize

^{pr2}$

它绕过了对repl_dict的需要,并可扩展到数千个值。 当然,现在的标签编码完全是pd.factorize。。。在

您可以使用iloc和{},使用dict,即

df3.iloc[:,1:] = df3.iloc[:,1:].replace({'A':1,'B':2,'C':3,'D':4})

相关问题 更多 >