Да, это не будет тривиальной проблемой для решения. pd.read_excel
принимает **kwargs
в своей подписи. Это означает, что вы можете передавать любые аргументы ключевых слов, какие пожелаете, потому что read_excel
не собирается ничего делать с аргументами ключевых слов, которые не нужны для использования.
Один из способов решения этой проблемы -
- Определите, какие ключевые аргументы
read_excel
на самом деле принимает
- Создание списка аргументов для
read_excel
- Отфильтровать недопустимые аргументы по результатам (1)
- Передать отфильтрованный список аргументов в функцию
Чтобы обработать (1), вы можете использовать модуль inspect
, чтобы определить, какие аргументы pd.read_excel
принимает. В частности, метод inspect.signature
возвращает объект Signature
, из которого вы можете запросить атрибут parameters
. Это возвращает mappingproxy
(фактически неизменный словарь).
import inspect
args = inspect.signature(pd.read_excel).parameters
print(args)
mappingproxy({'convert_float': <Parameter "convert_float=True">,
'converters': <Parameter "converters=None">,
'date_parser': <Parameter "date_parser=None">,
'dtype': <Parameter "dtype=None">,
...})
Здесь предполагается, что (2) уже сделано. Однако в вашем случае вам нужно будет убедиться, что ваши потенциальные параметры находятся внутри словаря, так как это действительно будет легко пересекаться в mappingproxy и фильтре.
params = {'io' : 'myfile.xlsx', 'some_dummy_param' : True}
Шаг (3) включает в себя выполнение установленного пересечения клавиш, а затем пересоздание нового списка параметров только из пересечения.
valid_params = {k : params[k] for k in params.keys() & args.keys()}
print(valid_params)
{'io': 'myfile.xlsx'}
Это формирует ваш действительный список аргументов - основу для (4).
df = pd.read_excel(**valid_params)