检查国家代码是否包含给定的字符串

时间:2018-08-13 10:21:24

标签: python-3.x pandas data-science

下面是我的代码

years_list = set() 
for i in range(0,indicators_csv.shape[0]) :
    if (indicators_csv['CountryCode'].str.contains('USA')) :
       years_list.append(indicator_csv.iloc[i].Year)

这里indicator_csv是一个csv文件,其列为“ CountryCode” 运行此命令时出现以下错误

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

在if行上。我也尝试过

if (indicators_csv['CountryCode'] == ('USA'))

,但出现相同的错误。

我用谷歌搜索后发现一些与数字或和/或但与我发现的东西无关的答案。

3 个答案:

答案 0 :(得分:2)

如果我对您的理解是正确的,并且希望遍历df而不是使用矢量化方法,则可以使用:

years_list = []
for index, row in indicators_csv.iterrows():
    if ('USA' in row['CountryCode']):
        years_list.append(row['Year'])

输入:

  CountryCode  Year
0         USA  1980
1          UK  1990
2          FR  1984
3         USA  2000

输出:

[1980L, 2000L]

答案 1 :(得分:1)

您应该尝试避免尽可能多地遍历pandas对象-它比本机矢量化操作慢。您的问题是indicators_csv['CountryCode'].str.contains('USA')每行都要检查'USA'是否在'CountryCode'中,因此最终会出现一列True和False条目。

您要做的是将数据框过滤为仅包含'USA'的那些行,然后将'Year'列从该帧转换为列表。您可以通过一项操作直接完成所有这些操作(为了便于阅读,请分成两行)

years_list = indicators_csv[indicators_csv['CountryCode'].str.contains('USA')]\
                           ['Year'].tolist()

答案 2 :(得分:0)

由于您试图在需要单个布尔值的IF子句中使用一系列布尔值,因此引发了错误。