Pandas / Python:替换多列中的多个值

时间:2015-12-22 23:40:54

标签: python pandas recode

全部,我有一个包含190列和902行的分析csv文件。我需要从它的当前1-5个李克特缩放到0-4李克特缩放的几列(准确地说是18)中重新编码值。

我尝试过使用替换:

df.replace({'Job_Performance1': {1:0, 2:1, 3:2, 4:3, 5:4}}, inplace=True)

但是会抛出一个值错误:"重叠键和值不允许替换"

我可以使用map:

df['job_perf1'] = df.Job_Performance1.map({1:0, 2:1, 3:2, 4:3, 5:4})

但是,我知道必须有一种更有效的方法来实现这一点,因为这个用例是统计分析和统计软件的标准,例如SPSS

我已经回顾了StackOverFlow上的多个问题,但它们都不适合我的用例。 例如Pandas - replacing column valuespandas replace multiple values one columnPython pandas: replace values multiple columns matching multiple columns from another dataframe

连连呢?

2 个答案:

答案 0 :(得分:2)

您可以简单地从列中减去标量值,这实际上是您在此处所做的:

df['job_perf1'] = df['job_perf1'] - 1

另外,当您需要在18列上执行此操作时,我会构建18个列名称的列表,并立即从所有列中删除1

df[col_list] = df[col_list] - 1

答案 1 :(得分:1)

无需映射。这可以作为向量加法来完成,因为有效地,您正在做的事情是从每个值中减去1。这很优雅:

df['job_perf1'] = df['Job_Performance1'] - numpy.ones(len(df['Job_Performance1']))

或者,没有numpy

df['job_perf1'] = df['Job_Performance1'] - [1] * len(df['Job_Performance1'])