在数据框内的列表中查找和替换值

时间:2017-06-26 05:11:14

标签: python list pandas dataframe replace

我有一个数据框,列中的值在列表中。我需要从列表中替换少量值。

我想要替换","用";"我不想要括号" []"我希望他们在一个字符串

数据框中的示例数据:

[Yuengert Andrew M.]
[Chen Tianxu, Tribbitt Mark A., Yang Yi, Li Xi]
[Wright Chadwick L., Niederkohr Ryan D., Knopp]

预期结果:

Yuengert Andrew M.
Chen Tianxu; Tribbitt Mark A.; Yang Yi; Li Xi
Wright Chadwick L.; Niederkohr Ryan D.; Knopp

4 个答案:

答案 0 :(得分:2)

如果值为join,则可以使用lists

df = pd.DataFrame({'col':[['Yuengert Andrew M.'], 
                          ['Chen Tianxu', 'Tribbitt Mark A.', 'Yang Yi', 'Li Xi'],
                          ['Wright Chadwick L.', 'Niederkohr Ryan D.', 'Knopp']]})
print (df)
                                               col
0                             [Yuengert Andrew M.]
1  [Chen Tianxu, Tribbitt Mark A., Yang Yi, Li Xi]
2  [Wright Chadwick L., Niederkohr Ryan D., Knopp]


print (type(df.loc[0, 'col']))
<class 'list'>

df['col'] = df['col'].apply('; '.join)
print (df)
                                             col
0                             Yuengert Andrew M.
1  Chen Tianxu; Tribbitt Mark A.; Yang Yi; Li Xi
2  Wright Chadwick L.; Niederkohr Ryan D.; Knopp

另一种解决方案:

df['col'] = ['; '.join(x) for x in df['col']]
print (df)
                                             col
0                             Yuengert Andrew M.
1  Chen Tianxu; Tribbitt Mark A.; Yang Yi; Li Xi
2  Wright Chadwick L.; Niederkohr Ryan D.; Knopp

但如果strings Series.replace ^匹配字符串的开头和$字符串的结尾:

df = pd.DataFrame({'col': ['[Yuengert Andrew M.]', 
                           '[Chen Tianxu, Tribbitt Mark A., Yang Yi, Li Xi]',
                           '[Wright Chadwick L., Niederkohr Ryan D., Knopp]']})
print (df)
                                               col
0                             [Yuengert Andrew M.]
1  [Chen Tianxu, Tribbitt Mark A., Yang Yi, Li Xi]
2  [Wright Chadwick L., Niederkohr Ryan D., Knopp]

print (type(df.loc[0, 'col']))
<class 'str'>

df['col']  = df['col'].replace(['^\[|\]$', ','],['', ';'],regex=True)
print (df)
                                             col
0                             Yuengert Andrew M.
1  Chen Tianxu; Tribbitt Mark A.; Yang Yi; Li Xi
2  Wright Chadwick L.; Niederkohr Ryan D.; Knopp

str.stripstr.replace的另一种解决方案:

df['col']  = df['col'].str.strip('[]').str.replace(',', ';')
print (df)
                                             col
0                             Yuengert Andrew M.
1  Chen Tianxu; Tribbitt Mark A.; Yang Yi; Li Xi
2  Wright Chadwick L.; Niederkohr Ryan D.; Knopp

答案 1 :(得分:1)

如果值实际上是列表,请使用pandas.Series.str.join

df.col.str.join('; ')

0                               Yuengert Andrew M.
1    Chen Tianxu; Tribbitt Mark A.; Yang Yi; Li Xi
2    Wright Chadwick L.; Niederkohr Ryan D.; Knopp
Name: col, dtype: object

答案 2 :(得分:0)

如果您的列是原始字符串格式而不是列表,则可以执行以下操作:

df.col.replace('\[|\]','',regex=True).str.split(',').str.join(';')
Out[48]: 
0                               Yuengert Andrew M.
1    Chen Tianxu; Tribbitt Mark A.; Yang Yi; Li Xi
2    Wright Chadwick L.; Niederkohr Ryan D.; Knopp
Name: col, dtype: object

答案 3 :(得分:0)

如果您有以下数据,则可以使用简单连接处理它。

col = {'col':[['Yuengert Andrew M.'], 
                          ['Chen Tianxu', 'Tribbitt Mark A.', 'Yang Yi', 'Li Xi'],
                          ['Wright Chadwick L.', 'Niederkohr Ryan D.', 'Knopp']]}
y = ' '.join(['; '.join(i) for i in col['col']])
print (y)

输出将是:

'Yuengert Andrew M. Chen Tianxu; Tribbitt Mark A.; Yang Yi; Li Xi Wright Chadwick L.; Niederkohr Ryan D.; Knopp'