这个问题的另一个版本从未得到回答,原始海报没有提供完整的代码示例...
我有一个旨在导入电子表格以进行格式化的功能。现在,电子表格可以采用两种形式:
代码看起来像
def func1(spreadsheet):
if type(spreadsheet) == pd.DataFrame:
df = spreadsheet
else:
df_ext = os.path.splitext(spreadsheet)[1]
etc. etc.
如果我使用DataFrame运行此功能,则会出现以下错误:
---> 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
为什么要这么做?
答案 0 :(得分:2)
因此,一种方法是只与字符串进行比较,然后在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 :(得分:1)
这是问题所在:
if type(spreadsheet) == pd.DataFrame:
数据帧的类型为pandas.core.frame.DataFrame
。 pandas.DataFrame is a class会在您调用它时返回一个数据框。
其中任何一种都可以工作:
if type(spreadsheet) == type(pd.DataFrame()):
if type(spreadsheet) == pd.core.frame.DataFrame: