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

Pandas/Python: Replace multiple values in multiple columns

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

我试过使用替换:

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

但这会引发值错误:"Replacement not allowed with overlapping keys and values"

我可以使用地图:

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

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

我在 Whosebug 上查看了多个问题,但其中 none 非常适合我的用例。 例如, pandas replace multiple values one column, Python pandas: replace values multiple columns matching multiple columns from another dataframe

建议?

不需要映射。这可以作为矢量加法来完成,因为实际上,您正在做的是从每个值中减去 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'])

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

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

此外,由于您需要在 18 列上执行此操作,因此我将构建一个包含 18 个列名的列表,然后一次从所有列名中减去 1

df[col_list] = df[col_list] - 1