我有一个像这样的 Pandas 数据框(作者、标题和年份不相关,因此 A、T 和 Y):
Author Title Year Country
A T Y UK. cat@mail.uk
A T Y U.S.A.
A T Y University of Cambridge
A T Y United Kingdom
A T Y somename@uconn.edu
我想要实现的是一个带有“干净”国家列的数据框:
Author Title Year Country
A T Y UK
A T Y USA
A T Y UK
A T Y UK
A T Y USA
为此,我创建了一个(列表)字典:
UK = ['UK.', 'Cambridge', 'United Kingdom']
USA = ['U.S.A.', 'conn.edu']
my_dict = {'UK': UK, 'USA': USA}
输入以下函数进行清理:
def clean_country(country_dict):
for key in country_dict:
for value in country_dict[key]:
if df['Country'].str.contains(value):
df['Country'] = np.where(value, key, df['Country'].str.replace('-', ' '))
return df
else:
continue
clean_country(my_dict)
但我收到以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 4, in clean_country
File "/Users/birgitte/PycharmProjects/text/venv/lib/python3.7/site-packages/pandas/core/generic.py", line 1555, in __nonzero__
self.__class__.__name__
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
在函数内部使用以下内容时:
df['Country'].str.contains(value).all(): False(并非所有字段都包含该值)。没有更改任何国家/地区字段。
df['Country'].str.contains(value).any():真(某些字段包含值)。结果是ValueError: invalid literal for int() with base 10: 'UK'
df['Country'].str.contains(value).item(): 结果是ValueError: can only convert an array of size 1 to a Python scalar
df['Country'].str.contains(value).bool(): 导致ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
非常欢迎任何关于如何实现“干净”国家专栏的帮助。
Qyouu
沧海一幻觉
随时随地看视频慕课网APP
相关分类