我正在使用isbnlib.meta
,当您输入isbn时,它会提取元数据(书名、作者、年份出版商等)。我有一个包含482000个ISBN的数据帧(列标题:isbn13)。当我运行这个函数时,我会得到一个类似NotValidISBNError
的错误,它会停止代码的运行。我想发生的是,如果出现错误,代码将直接跳过该行并移到下一行
这是我现在的代码:
list_df[0]['publisher_isbnlib'] = list_df[0]['isbn13'].apply(lambda x: isbnlib.meta(x).get('Publisher', None))
list_df[0]['yearpublished_isbnlib'] = list_df[0]['isbn13'].apply(lambda x: isbnlib.meta(x).get('Year', None))
#list_df[0]['language_isbnlib'] = list_df[0]['isbn13'].apply(lambda x: isbnlib.meta(x).get('Language', None))
list_df[0]
list_df[0]
是我试图通过数据帧进行分块后的前20000行。我刚刚手动输入了24次代码来处理每个块
我尝试了尝试:除了:但最终发生的是代码停止,我没有得到任何元数据报告
---------------------------------------------------------------------------
NotValidISBNError Traceback (most recent call last)
<ipython-input-39-a06c45d36355> in <module>
----> 1 df['meta'] = df.isbn.apply(isbnlib.meta)
e:\Anaconda3\lib\site-packages\pandas\core\series.py in apply(self, func, convert_dtype, args, **kwds)
4198 else:
4199 values = self.astype(object)._values
-> 4200 mapped = lib.map_infer(values, f, convert=convert_dtype)
4201
4202 if len(mapped) and isinstance(mapped[0], Series):
pandas\_libs\lib.pyx in pandas._libs.lib.map_infer()
e:\Anaconda3\lib\site-packages\isbnlib\_ext.py in meta(isbn, service)
23 def meta(isbn, service='default'):
24 """Get metadata from Google Books ('goob'), Open Library ('openl'), ..."""
---> 25 return query(isbn, service) if isbn else {}
26
27
e:\Anaconda3\lib\site-packages\isbnlib\dev\_decorators.py in memoized_func(*args, **kwargs)
22 return cch[key]
23 else:
---> 24 value = func(*args, **kwargs)
25 if value:
26 cch[key] = value
e:\Anaconda3\lib\site-packages\isbnlib\_metadata.py in query(isbn, service)
18 if not ean:
19 LOGGER.critical('%s is not a valid ISBN', isbn)
---> 20 raise NotValidISBNError(isbn)
21 isbn = ean
22 # only import when needed
NotValidISBNError: (abc) is not a valid ISBN
dict
中提取数据李>try-except
块从无效的isbn值捕获错误。dict
,{}
,因为pd.json_normalize
不能与NaN
或None
一起使用李>pd.json_normalize
用于扩展从.meta
返回的dict
李>pandas.DataFrame.rename
重命名列,使用pandas.DataFrame.drop
删除列李>lists
中提取值,例如'Authors'
列,请使用df_meta = df_meta.explode('Authors')
;如果有多个作者,则将为列表中的每个其他作者创建一个新行李>在没有看到代码的情况下很难回答,但是try/except应该真的能够处理这个问题
我不是这里的专家,但看看下面的代码:
如果您尝试使用字符串进行加法,python会讨厌它,并使用
TypeError
退出。因此,您可以使用except捕获TypeError
,并可能报告一些关于它的信息。当我运行此代码时:您应该能够使用
except NotValidISBNError
处理异常,然后报告您喜欢的任何元数据通过异常处理,您可以变得更加复杂,但这是基本思想
相关问题 更多 >
编程相关推荐