Pandas — Перебор индекса в цикле

#python #pandas #loops

#python #pandas #циклы

Вопрос:

У меня странное взаимодействие, с которым мне нужна помощь. В основном :

1) Я создал фрейм данных pandas, который содержит 1179 строк x 6 столбцов. Один столбец — это названия улиц, и одно и то же значение будет иметь несколько дубликатов (потому что каждая строка представляет точку, и каждая точка связана с улицей).

2) У меня также есть список всех улиц в этом фрейме данных panda.

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: []
  

и так далее…

Я не могу понять, почему. У кого-нибудь есть идея?

Спасибо

Комментарии:

1. Вам не нужно добавлять кавычки здесь: sub_df[sub_df.AQROUTES_3 =="'" str(x) "'"] . Это позволило бы искать строку с фактическими кавычками в строке. Вероятно, вам также не нужно приводить его к строке, поскольку я полагаю, что это уже строка.

Ответ №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)])