Создание функции для проверки соответствия данных в Excel продолжает возвращать false - PullRequest
2 голосов
/ 25 марта 2020

Я хотел создать функцию, используя python, чтобы проверить, существует ли число (полученное на основе строки файла) или нет в Excel, используя pandas, если число существует, оно будет делать что-то вроде ".. . "зарегистрирован" и выполняет некоторую функцию, и наоборот.

Код, который я пытался использовать, выглядит следующим образом:

from tkinter import filedialog
import pandas as pd
import re

file = filedialog.askopenfilename(initialdir="C:/", title="choose file", filetypes=(("xlsx", "*.xlsx"), ("xls", "*.xls")))
name = (r'/(\w+)_(\w+)_excel.xlsx')
number = re.search(name, file).group(2)

references = pd.read_excel(r'C:/example.xlsx')

if float(number) == references:
    print(number + " is registered") #and more function
else:
    print(number + " is not registered") #and more function

Когда я использую этот код, он возвращает ValueError:

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

Я немного посмотрел на это и обнаружил, что (насколько я понимаю) это происходит потому, что функция недостаточно специфицирована c и может возвращать как true, так и false, а затем я попытался использовать .any или .all после references в функции, но каким-то образом она продолжает возвращать false, даже если число существует в Excel.

Когда я попытался проверить это с помощью print(number == references), он покажет список и скажет мне, где находятся соответствующие данные, но почему-то, когда я попытался сделать из него функцию, он продолжает возвращать false .

Ссылки Excel содержат только «Заголовок» в ячейке A1, а остальное - просто число, зарегистрированное в нем.

Я попытался найти его и нашел кое-что о pandas.DataFrame.isin, но я Я не понимаю, как поставить это как функцию, и я не думаю, что смогу использовать ее в своей проблеме.

Извините, если это довольно простой вопрос, но почему-то я не могу найти ответ на этот вопрос, также я Новое в python и английском sh не мой родной язык.

1 Ответ

1 голос
/ 25 марта 2020

Я все еще относительно новичок в Python, но позвольте мне подумать:

  • Вы извлекаете переменную из имени файла excel, скажем, 1234ABCD из чего-то вроде TestFile_1234ABCD_excel.xlsx. Правильно?
  • Затем вы вытягиваете содержимое файла с именем C:/example.xlsx в кадр данных, верно?
  • Наконец, вы проверяете, находится ли переменная где-нибудь в датафрейм?

Итак, я думаю, что здесь все пошло не так: вы сравниваете фрейм данных с переменной, используя ==, который является оператором равенства. Это может быть причиной возвращения False, но я не могу сказать, что это действительная причина, так как я еще не полностью понимаю механику Пихтона.

Однако, что делает работа для меня, копирующая Вашу проблему, была следующей; Я просто использовал:

if number in references.values:
    print(number + " is registered") #and more function
else:
    print(number + " is not registered") #and more function

Это сработало, потому что "класс dataframe предоставляет переменную-член, т.е. DataFrame.values. Он возвращает представление numpy всех значений в dataframe. Мы можем использовать в & не в операторах этих значений, чтобы проверить, существует ли данный элемент или нет. " Источник

Дайте мне знать, помогло ли это =)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...