我在下面创建了一个函数get_lyrics,我想从现有数据帧中传递Song_Title和Singer_Name列值,并在数据帧中创建一个新列。
我下面试图创建列df['Lyrics']
的代码在下面给了我这个错误,我不知道为什么:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我用get_lyrics(test_song_name, test_song_author)
对函数进行了测试,它返回了一个很长的字符串。
import lyricsgenius as lg
import pandas as pd
genius = lg.Genius(access_token=token)
test_song_name = "My Heart Will Go On"
test_song_author = "Celine Dion"
def get_lyrics(Song_Title, Singer_Name):
song = genius.search_song(Song_Title, Singer_Name)
return song.lyrics
get_lyrics(test_song_name, test_song_author)
df['Lyrics'] = df.apply(
get_lyrics(
df["Song_Title"], df["Singer_Name"]
)
)
要在行上应用函数,可以将apply()
与axis=1
一起使用。
df['Lyrics'] = df.apply(lambda row: get_lyrics(row["Song_Title"], row["Singer_Name"]), axis=1)
或者在单行中具有lambda函数
df['Lyrics'] = df.apply(lambda row: genius.search_song(row["Song_Title"], row["Singer_Name"]).lyrics, axis=1)
如果你不想要lambda,你可以做
def get_lyrics(row):
song = genius.search_song(row["Song_Title"], row["Singer_Name"])
return song.lyrics
df['Lyrics'] = df.apply(genius.search_song, axis=1)
我在这里找到了这个页面:https://www.codeforests.com/2020/07/18/pass-multiple-columns-to-lambda/
这有两个可行的解决方案。第一个与@Ynjxsjmh 发布的内容相同
df["Lyrics"] = df.apply(lambda x :
get_lyrics(x["Song_Title"], x["Singer_Name"]), axis=1
)
后一个首先选择数据帧列的一个子集,然后用*x将它们解包,以提供给get_lyrics。
df["Lyrics"] = df[["Song_Title", "Singer_Name"]].apply(lambda x:
get_lyrics(*x),
axis=1)