【问题标题】:Pandas - Iterating over an index in a loopPandas - 在循环中迭代索引
【发布时间】:2019-07-28 10:16:12
【问题描述】:

我有一个奇怪的互动需要帮助。基本上:

1) 我创建了一个包含 1179 行 x 6 列的 pandas 数据框。一列是街道名称,相同的值会有多个重复项(因为每一行代表一个点,每个点都与一条街道相关联)。

2) 我还有这个熊猫数据框中所有街道的列表。

3)如果我运行这一行,我会得到与该街道名称匹配的所有行的输出:

print(sub_df[sub_df.AQROUTES_3=='AvenueMermoz'])

结果:

       FID    AQROUTES_3 ...      BEARING E_ID
983    983  AvenueMermoz ...   288.058014     
984    984  AvenueMermoz ...   288.058014     
992    992  AvenueMermoz ...   288.058014     
1005  1005  AvenueMermoz ...   288.058014     
1038  1038  AvenueMermoz ...   288.058014     
1019  1019  AvenueMermoz ...   288.058014 

但是,如果我在循环中使用列表中的字符串作为街道名称运行此命令,它会返回一个空数据框:

x=()
for names in pd_streetlist:
    print(names)
    x=names
    print(sub_df[sub_df.AQROUTES_3 =="'"+str(x)+"'"])
    x=()

返回:

RangSaint_Joseph
Empty DataFrame
Columns: [FID, AQROUTES_3, X, Y, BEARING, E_ID]
Index: []
AvenueAugustin
Empty DataFrame
Columns: [FID, AQROUTES_3, X, Y, BEARING, E_ID]
Index: []

等等……

我不知道为什么。有人有想法吗?

谢谢

【问题讨论】:

  • 您无需在此处添加引号:sub_df[sub_df.AQROUTES_3 =="'"+str(x)+"'"]。这将在字符串中查找带有实际引号的字符串。您可能也不需要将其转换为字符串,因为我想它已经是字符串了。

标签: python pandas loops


【解决方案1】:

我认为问题出在这一行:

print(sub_df[sub_df.AQROUTES_3 =="'"+str(x)+"'"])

对于每个names,您在开头和结尾添加了不必要的引号字符,以便街道的每个有效名称(在您的示例中,'AvenueMermoz' 变成 "'AvenueMermoz'",我们必须使用双引号将单引号括起来- 引用的字符串)。

正如@busybear 所评论的那样 - 也不需要转换为str。因此,更正后的行将是:

print(sub_df[sub_df.AQROUTES_3 == x])

【讨论】:

    【解决方案2】:

    因此,您在不应该的过滤器中添加引号。现在您正在过滤“AvenueMermoz”,而您只想过滤 AvenueMermoz。

    所以

    print(sub_df[sub_df.AQROUTES_3 =="'"+str(x)+"'"])
    

    应该变成

    print(sub_df[sub_df.AQROUTES_3 ==str(x)])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 2016-06-07
      • 2018-10-13
      • 2013-01-03
      • 2020-08-11
      • 2018-01-13
      • 1970-01-01
      相关资源
      最近更新 更多