#python #pandas #dataframe
#python #панды #фрейм данных
Вопрос:
На другую версию этого вопроса никогда не было ответа, оригинальный плакат не давал полного примера их кода…
У меня есть функция, предназначенная для импорта электронной таблицы для целей форматирования. Теперь электронная таблица может иметь две формы:
- Как строка имени файла (excel, .csv и т. Д.), Которая будет импортирована как фрейм данных
- Непосредственно как фрейм данных (есть еще одна функция, которая может вызываться или не вызываться для выполнения некоторой предварительной обработки)
код выглядит так
def func1(spreadsheet):
if type(spreadsheet) == pd.DataFrame:
df = spreadsheet
else:
df_ext = os.path.splitext(spreadsheet)[1]
etc. etc.
Если я запускаю эту функцию с фреймом данных, я получаю следующую ошибку:
---> 67 if type(spreadsheet) == pd.DataFrame: df = spreadsheet
68 else:
/opt/anaconda3/lib/python3.7/posixpath.py in splitext(p)
120
121 def splitext(p):
--> 122 p = os.fspath(p)
123 if isinstance(p, bytes):
124 sep = b'/'
TypeError: expected str, bytes or os.PathLike object, not DataFrame
Почему он это делает?
Комментарии:
1. Итак, в этом случае, почему бы вам просто не проверить, является ли ввод в электронную таблицу a
string
(в случае, если это путь к файлу), а затем прочитать фрейм данных в условии else2. Я пробовал это. Он выдал ту же ошибку…
Ответ №1:
Итак, один из способов — просто сравнить со строкой и прочитать фрейм данных в состоянии else. Другим способом было бы использовать isinstance
In [21]: dict1
Out[21]: {'a': [1, 2, 3, 4], 'b': [2, 4, 6, 7], 'c': [2, 3, 4, 5]}
In [24]: df = pd.DataFrame(dict1)
In [28]: isinstance(df, pd.DataFrame)
Out[28]: True
In [30]: isinstance(os.getcwd(), pd.DataFrame)
Out[30]: False
Итак, в вашем случае просто сделайте это
if isinstance(spreadsheet, pd.DataFrame)
Комментарии:
1. Я попытался переключить оператор if на ‘if type (spreadsheet) == str: …’, но он выдал точно такую же ошибку!!
2. Он выдает ошибку, даже если я просто пытаюсь ‘print (type (spreadsheet))’, чтобы посмотреть, что происходит
Ответ №2:
Проблема в этой строке:
if type(spreadsheet) == pd.DataFrame:
Тип pandas.core.frame.DataFrame
фрейма данных . pandas .DataFrame — это класс, который возвращает фрейм данных при его вызове.
Любой из них будет работать:
if type(spreadsheet) == type(pd.DataFrame()):
if type(spreadsheet) == pd.core.frame.DataFrame:
Комментарии:
1. Если я выполняю ‘type (spreadsheet) == pd.DataFrame’ вне функции, он возвращает True . Я попытался исправить, но он вернул ту же ошибку