#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. Задав вопрос, я продолжил тестирование и обнаружил, что это тоже был фильтр. Спасибо!