我有一个数据框,列中的值在列表中。我需要从列表中替换少量值。
我想要替换","用";"我不想要括号" []"我希望他们在一个字符串
数据框中的示例数据:
[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
答案 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.strip
和str.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'