全部,我有一个包含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 values,pandas replace multiple values one column,Python pandas: replace values multiple columns matching multiple columns from another dataframe
连连呢?
答案 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'])