Панды либо не находят определенную строку данных, либо обнаруживают ее как пустой фрейм данных

#python #pandas #dataframe

Вопрос:

У меня есть большой объем данных, которые необходимо упорядочить для чтения, а затем объединить с помощью pandas, моя проблема в том, что я заметил, что pandas возвращал «пустой фрейм данных» в определенных строках.

 info = pd.read_excel("01. US Books.xlsx")
book3 = load_workbook("01. US Books.xlsx",data_only=True)
book3sheet=book3['US Projects']

for i in range(3,10,1):
 u = book3sheet.cell(row=i,column=1).value
 print(str(u))
 desc = info[info["IDshorttext"].isin([str(u)])]
 print(desc)
 

Это код, который я использовал для тестирования, я использую цикл for, чтобы он прошел через X строк перед остановкой, так как мне нужны только определенные строки данных, когда я запускаю код, он работает, но возвращает определенные строки как «пустые кадры данных».

Например, мой excel выглядит примерно так:

 IDshorttext      X           Y           Z
 FR21AR3456    100000      234546    43434343

    6068871    486512       45465      454544


FR21AR34356 <-This one is read perfectly and returns the whole row as a dataframe
    6068871 <-These ones are returned as empty dataframes
 

В моем файле excel я получил много значений в первом столбце, которые похожи на предыдущие примеры, но только те, которые выглядят так «6068871», не читаются.

Мой вопрос: есть ли что-то не так с моим кодом, из-за чего их невозможно прочитать, или проблема в формате файла excel?

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

1. Не могли бы вы предоставить нам примеры данных?. Но это не только набросок, я говорю о чем-то подобном df = pd.DataFrame(....) . Кроме того, было бы неплохо, если бы вы предоставили нам данные, которые вы ожидаете получить в качестве выходных данных.

Ответ №1:

Проблема в вашем фильтре:

 desc = info[info["IDshorttext"].isin([str(u)])]
 

Ваш фрейм данных содержит строки и целые числа. Однако вы всегда приводите их в качестве строк, чтобы сравнить их. Следовательно, вы говорите: «дайте мне строку, содержащую «6068871», строку». Но есть только строка, содержащая 6068871, целое число.

пробовать:

 desc = info[info["IDshorttext"].isin([u])]
 

или

 desc = info[info["IDshorttext"] == u]
 

На самом деле нет причин использовать «isin ()», если у вас есть только одно значение, а не массив/список.

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

1. Задав вопрос, я продолжил тестирование и обнаружил, что это тоже был фильтр. Спасибо!