首页 > 解决方案 > 一次在多个列上执行替换的更简单方法?

问题描述

import pandas as pd
w=pd.read_csv('w.csv')

获取 CSV 的部分以将它们相加。两列需要数值转换

w["Social Media Use Score"]=w.iloc[:,[6,7,8,9,10,11,12,13,14,15,16]].sum(axis=1)

将此部分中的 Yes 或 No 切换为 1 o 0 并将它们相加,其他部分将 ABCD 切换为 1234 并求和

  w['Q1'],w['Q3'],w['Q6'] = w['Q1'].map({'No': 1, 'Yes': 0}),\
    w['Q3'].map({'No': 1, 'Yes': 0}),\
    w['Q6'].map({'No': 1, 'Yes': 0})
    w['Q2'],w['Q4'],w['Q5'],w['Q7'],w['Q8'],w['Q9'],w['Q10']=\
    w['Q2'].map({'Yes': 1, 'No': 0}),\
    w['Q4'].map({'Yes': 1, 'No': 0}),\
    w['Q5'].map({'Yes': 1, 'No': 0}),\
    w['Q7'].map({'Yes': 1, 'No': 0}),\
    w['Q8'].map({'Yes': 1, 'No': 0}),\
    w['Q9'].map({'Yes': 1, 'No': 0}),\
    w['Q10'].map({'Yes': 1, 'No': 0})
    w["Anxiety Score"]=w.iloc[:,[17,18,19,20,21,22,23,24,25,26]].sum(axis=1) 


w['d1'],w['d2'],w['d3'],w['d4'],w['d5'],w['d6'],w['d7'],w['d8'],w['d9'],w['d10']=\
            w['d1'].map({'A': 1, 'B': 2,'C':3,'D':4}),\
            w['d2'].map({'A': 1, 'B': 2,'C':3,'D':4}),\
            w['d3'].map({'A': 1, 'B': 2,'C':3,'D':4}),\
            w['d4'].map({'A': 1, 'B': 2,'C':3,'D':4}),\
            w['d5'].map({'A': 1, 'B': 2,'C':3,'D':4}),\
            w['d6'].map({'A': 1, 'B': 2,'C':3,'D':4}),\
            w['d7'].map({'A': 1, 'B': 2,'C':3,'D':4}),\
            w['d8'].map({'A': 1, 'B': 2,'C':3,'D':4}),\
            w['d9'].map({'A': 1, 'B': 2,'C':3,'D':4}),\
            w['d10'].map({'A': 1, 'B': 2,'C':3,'D':4})
            w['Depression Score']=w.iloc[:,[27,28,29,30,31,32,33,34,35,36]].sum(axis=1)
            w.to_csv("foranal.csv")

标签: pythonpandascsv

解决方案


如果你想同时对多个列执行替换,你应该使用df.replace(它比 慢map,所以只有在你负担得起的情况下才使用它)。

# Mapping for replacement.
repl_dict = {'A':1, 'B':2,'C':3, 'D':4}
repl_dict.update({'Yes':1, 'No':0})
# Generate the list of columns to perform replace on.
cols = [f'{x}{y}' for x in ('Q','d') for y in range(1, 11)]
w[cols] = w[cols].replace(repl_dict)
# Fix values for special columns.
w.loc[:, ['Q1', 'Q3', 'Q6']] = 1 - w.loc[:, ['Q1', 'Q3', 'Q6']]

“社交媒体使用分数”和“焦虑分数”很好。


推荐阅读