一次对多个列进行替换的更简单方法?

时间:2018-11-26 22:10:45

标签: python pandas csv

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)

在本节中将“是”或“否”切换为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")

1 个答案:

答案 0 :(得分:2)

如果要同时对多个列执行替换,则应使用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']]

“社交媒体使用评分”和“焦虑评分”都可以。