首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeError:预期的str、字节或os.PathLike对象,而不是DataFrame -不是Repost

TypeError:预期的str、字节或os.PathLike对象,而不是DataFrame -不是Repost
EN

Stack Overflow用户
提问于 2020-10-28 17:45:35
回答 2查看 2.1K关注 0票数 0

这个问题的另一个版本没有得到回答,最初的海报没有给出完整的代码示例.

我有一个函数,用于导入电子表格以进行格式化。现在,电子表格可以分为两种形式:

  1. 作为文件名字符串(excel、.csv等)导入为DataFrame
  2. 直接作为一个DataFrame (还有另一个函数可能被调用,也可能不被调用来执行某些预处理)

代码看起来就像

代码语言:javascript
复制
def func1(spreadsheet):
    if type(spreadsheet) == pd.DataFrame: 
        df = spreadsheet
    else:
        df_ext = os.path.splitext(spreadsheet)[1]
        etc. etc.

如果我使用DataFrame运行此函数,则会得到以下错误:

代码语言:javascript
复制
---> 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

它为什么要这么做?

EN

回答 2

Stack Overflow用户

发布于 2020-10-28 17:54:43

因此,一种方法是将其与字符串进行比较,然后在one条件下读取dataframe。另一种方法是使用isinstance

代码语言:javascript
复制
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

所以,在你的情况下,就这么做吧

代码语言:javascript
复制
if isinstance(spreadsheet, pd.DataFrame)
票数 2
EN

Stack Overflow用户

发布于 2020-10-28 18:01:10

这一行是问题所在:

代码语言:javascript
复制
if type(spreadsheet) == pd.DataFrame: 

dataframe的类型是pandas.core.frame.DataFramepandas.DataFrame是一个类,它在调用数据时返回数据。

这两种方法中的任何一种都能奏效:

代码语言:javascript
复制
if type(spreadsheet) == type(pd.DataFrame()):


if type(spreadsheet) == pd.core.frame.DataFrame:
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64578491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档