如何根据条件更改python数据帧中的值(即列表)?

如何根据条件更改python数据帧中的值(即列表)?,python,python-3.x,pandas,dataframe,Python,Python 3.x,Pandas,Dataframe,我有一个数据框“songDataFrame”,里面有关于歌曲的信息。有三个栏目:“艺术家”、“标题”、“流派”。前两个是字符串,“流派”包含流派列表。看起来是这样的: id artist title genres 1 'Sarah Bareilles' 'Opening Up' ['acoustic','pop', 'piano'] 2 'Post Malone' 'Stay' ['Hip-Hop', 'rap', '

我有一个数据框“songDataFrame”,里面有关于歌曲的信息。有三个栏目:“艺术家”、“标题”、“流派”。前两个是字符串,“流派”包含流派列表。看起来是这样的:

id  artist             title         genres
1   'Sarah Bareilles'  'Opening Up'  ['acoustic','pop', 'piano']
2   'Post Malone'      'Stay'        ['Hip-Hop', 'rap', 'trap']
3   'Dean Lewis'       'Waves'       ['alternative', 'guitar', 'indie']
4   'Billie Eilish'    'Watch'       ['indie', 'indie pop', 'pop']
5   'Passenger'        'Let Her Go'  ['metal', 'screamo', 'gore']
艺术家“乘客”的类型是错误的。我想把现有的列表改为[‘独立摇滚’、‘民间摇滚’]

如果它不是一个列表,但我用一个字符串替换它,我会:

mask = songDataFrame.artist =='Passenger'
songDataFrame.loc[mask, 'genres'] = 'indie folk'
这样很好用。当我用['indie rock','folk rock'代替'indie folk'时

mask = songDataFrame.artist =='Passenger'
songDataFrame.loc[mask, 'genres'] = ['indie folk','folk rock']
我得到这个错误:

ValueError: Must have equal len keys and value when setting with an iterable

有没有办法解决这个问题?

使用两行并使用
loc
分配字符串,将所有列值设置为字符串,然后将其返回列表:

import ast
songDataFrame.loc[songDataFrame['artist']=='Passenger','genres']="['indie folk','folk rock']"
songDataFrame['genres']=songDataFrame['genres'].astype(str).apply(ast.literal_eval)
现在:

print(songDataFrame)
是:


没有额外的软件包和
literal\u eval
技巧:

mask = (songDataFrame.artist == 'Passenger').tolist().index(True)
songDataFrame.at[mask, 'genres'] = ['indie folk','folk rock']

像做梦一样工作!谢谢
mask = (songDataFrame.artist == 'Passenger').tolist().index(True)
songDataFrame.at[mask, 'genres'] = ['indie folk','folk rock']