TypeError:预期的str,字节或os.PathLike对象,而不是DataFrame-不是重新发布

时间:2020-10-28 17:45:35

标签: python pandas dataframe

这个问题的另一个版本从未得到回答,原始海报没有提供完整的代码示例...

我有一个旨在导入电子表格以进行格式化的功能。现在,电子表格可以采用两种形式:

  1. 作为要导入为DataFrame的文件名字符串(excel,.csv等)
  2. 直接作为DataFrame(可能会或可能不会调用另一个函数进行某些预处理)

代码看起来像

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

为什么要这么做?

2 个答案:

答案 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.DataFramepandas.DataFrame is a class会在您调用它时返回一个数据框。

其中任何一种都可以工作:

if type(spreadsheet) == type(pd.DataFrame()):


if type(spreadsheet) == pd.core.frame.DataFrame: