如何根据条件更改python数据帧中的值(即列表)?
我有一个数据框“songDataFrame”,里面有关于歌曲的信息。有三个栏目:“艺术家”、“标题”、“流派”。前两个是字符串,“流派”包含流派列表。看起来是这样的:如何根据条件更改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', '
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']