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
全部,我有一个包含 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 非常适合我的用例。
例如
建议?
不需要映射。这可以作为矢量加法来完成,因为实际上,您正在做的是从每个值中减去 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