将函数应用于数据帧,并仅返回Python中字典的一部分

将函数应用于数据帧,并仅返回Python中字典的一部分,python,pandas,dictionary,isbnlib,Python,Pandas,Dictionary,Isbnlib,我有一个带有“isbn13”列的df。我还有一个名为“isbnlib.meta”的函数。此函数来自isbnlib库。我想在“isbn13”列的每一行上运行该函数。我正在使用apply函数来实现这一点 df['publisher'] = df['isbn13'].apply(isbnlib.meta) 问题是,每个isbn13的结果都是一个具有不同点的字典,如标题、作者、出版商等。我只是在字典中查找要在数据框中写出的“出版商”结果 如何仅从函数的字典结果返回dataframe中的“Publis

我有一个带有“isbn13”列的df。我还有一个名为“isbnlib.meta”的函数。此函数来自isbnlib库。我想在“isbn13”列的每一行上运行该函数。我正在使用apply函数来实现这一点

df['publisher'] = df['isbn13'].apply(isbnlib.meta)

问题是,每个isbn13的结果都是一个具有不同点的字典,如标题、作者、出版商等。我只是在字典中查找要在数据框中写出的“出版商”结果

如何仅从函数的字典结果返回dataframe中的“Publisher”结果


提前谢谢。

我想您的
isbnlib.meta()
会根据
isbn13
列中的值返回一个字典。如果是这样,您可以在相同的
应用中使用lambda函数:

df['publisher'] = df['isbn13'].apply(lambda x: isbnlib.meta(x).get('Publisher', None))
在这种情况下,如果您的
dict
没有
Publisher
键,它将返回默认值
None

我不熟悉isbnlib库,但假设isbnlib.meta接收字符串并返回字典,您可以执行以下操作:

df['publisher'] = df['isbn13'].apply(lambda x: isbnlib.meta(x)['Publisher'])

在.apply()中使用lambda函数对于像这样的简单任务非常有用。

您能在
isbn13
中显示内容吗?我找到了一个潜在的解决方案:df['publisher'].apply(pd.Series)。这将从字典中分离出所有元数据。这是最好的解决方案吗?isbn13的内容是一个13位的字符串。如果您的
publisher
列在
apply
之后是一个字典,那么您可以执行
map
操作,仅获取发布者。非常感谢您的回复。这似乎不起作用,但我肯定我解释得不够好。此功能的输入是isbn13,这是一个用于图书标识的代码。当您通过函数发送单个isbn13时,它将返回元数据。我想隔离的是“Publisher”。如果我这样做:isbn='9780136858256'book=isbnlib.meta(isbn)publisher\u isbnlib=book['publisher']publisher\u isbnlib我会得到我想要的“Pearson”。所以我想为数据帧中每一行的isbn13做这个函数。我得到一个关键错误“Publisher”。我知道函数返回的字典中存在“Publisher”,因为当我将单个isbn13作为字符串传递时,它会返回该字典选项。您的一些书籍似乎没有
Publisher
键。如果
Publisher
键不存在,可以使用
dict
对象的
.get
方法返回一个默认值。这比我开始做的要出色和干净得多。非常感谢!