【发布时间】:2020-01-22 18:10:27
【问题描述】:
我尝试了不同的组合来从列中提取国家名称,并创建一个仅包含国家的新列。我可以对选定的行执行此操作,即 df.address[9998] 但不能针对整个列。
import pycountry
Cntr = []
for country in pycountry.countries:
for country.name in df.address:
Cntr.append(country.name)
你知道这里出了什么问题吗?
编辑:
address 是 df 中的一个对象,
df.address[:10] 看起来像这样
Address
0 Turin, Italy
1 NaN
2 Zurich, Switzerland
3 NaN
4 Glyfada, Greece
5 Frosinone, Italy
6 Dublin, Ireland
7 NaN
8 Turin, Italy
1 NaN
2 Zurich, Switzerland
3 NaN
4 Glyfada, Greece
5 Frosinone, Italy
6 Dublin, Ireland
7 NaN
8 ...
9 Kristiansand, Norway
Name: address, Length: 10, dtype: object
根据 Petar 在我运行单个查询时的响应,我得到了正确的国家,但是当我尝试创建一个包含所有国家的列(或像 df.address[:5] 这样的范围时,我得到一个空的 Cntr)
import pycountry
Cntr = []
for country in pycountry.countries:
if country.name in df['address'][1]:
Cntr.append(country.name)
Cntr
Returns
[Italy]
and df.address[2] returns [ ]
etc.
我也跑了
df['address'] = df['address'].astype('str')
确保列中没有浮点数或整数。
【问题讨论】:
-
欢迎来到 StackOverflow。见minimal, reproducible example。在您发布 MRE 代码并准确说明问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中并重现您指定的问题。您发布的代码依赖于未定义的数据框,并且您没有证明我们需要解决的问题。不要忘记跟踪您的程序(
print语句是一个好的开始)以检查数据类型和内容。 -
你能显示
df吗,for循环几乎不是解决方案,正则表达式可能更好 -
变量和函数名称应遵循
lower_case_with_underscores样式。我同意@Kenan,这里可能不需要循环。另外,我真的建议使用[ ]进行 DataFrame 列访问,而不是 dot/./attribute 样式。 -
谢谢大家!我将确保在我的代码中使用正确的命名。我添加了该功能的前 10 行,以便更清晰。如果还有什么我可以补充的,请告诉我。另外,@Kenan 我不知道如何使它与正则表达式一起工作。我试过这个 df['address_new'] = df['address'].astype(str).str.split().str[1],但结果并不好,所以我决定尝试 pycountry...