首页 > 解决方案 > 如何在具有多个条件的多列 col0、col1、col2 上使用替换方法

问题描述

如何在多列 col0,col1,col2 上使用替换方法

new_df['col0'].str.replace(']]', ']')

标签: pythonpandas

解决方案


使用DataFrame.replace

new_df = pd.DataFrame({'col0':[']]','aa]]'],
                       'col1':[']]','[s]'],
                       'col2':['[[]]]]',']'],
                       'col3':[']]', '[[]]]']})
print (new_df)
   col0 col1    col2   col3
0    ]]   ]]  [[]]]]     ]]
1  aa]]  [s]       ]  [[]]]

cols = ['col0','col1','col2']
new_df[cols] = new_df[cols].replace(']]', ']')
print (new_df)
   col0 col1    col2   col3
0     ]    ]  [[]]]]     ]]
1  aa]]  [s]       ]  [[]]]

如果要替换子字符串,请添加regex=True转义,\因为[是特殊regex字符:

cols = ['col0','col1','col2']
new_df[cols] = new_df[cols].replace('\]\]', ']', regex=True)
print (new_df)
  col0 col1  col2   col3
0    ]    ]  [[]]     ]]
1  aa]  [s]     ]  [[]]]

编辑:如果可能,将值转换为列表:

import ast

test=pd.DataFrame({'gender':['M']*4,'B':[[['Office/Work'],['31-35'], ['Salaried']],[['Movies,Restaurants'],['21-25'], ['Salaried']],[[ 'College/Park'],['21-25'],['Student']],[['College'], ['21-25'], ['Student']]]})
test = test.astype(str)
print (test)
  gender                                                  B
0      M         [['Office/Work'], ['31-35'], ['Salaried']]
1      M  [['Movies,Restaurants'], ['21-25'], ['Salaried']]
2      M         [['College/Park'], ['21-25'], ['Student']]
3      M              [['College'], ['21-25'], ['Student']]

df = pd.DataFrame([[y[0] for y in ast.literal_eval(x)] for x in test['B']],
                   columns=['a','b','c'])
print (df)
                    a      b         c
0         Office/Work  31-35  Salaried
1  Movies,Restaurants  21-25  Salaried
2        College/Park  21-25   Student
3             College  21-25   Student

解决方案replace

df = test['B'].replace(['\[\[','\]\]', '\], \['], ['', '', ';'], regex=True).str.split(';', expand=True)
print (df)
                      0        1           2
0         'Office/Work'  '31-35'  'Salaried'
1  'Movies,Restaurants'  '21-25'  'Salaried'
2        'College/Park'  '21-25'   'Student'
3             'College'  '21-25'   'Student'

推荐阅读