首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >结合使用pd.read_csv和pd.read_excel

结合使用pd.read_csv和pd.read_excel
EN

Stack Overflow用户
提问于 2020-10-14 18:24:17
回答 2查看 103关注 0票数 0

我被分配了一项任务,涉及将pd.read_csv()pd.read_excel()函数合并到一个名为ingest()的函数中。我一直在尝试使用正则表达式,这样如果文件包含".csv“,它就会执行read_csv()函数,否则就会将其读取为excel文件。

到目前为止,这是我的代码

代码语言:javascript
复制
    rexf = re.compile((r'.csv'))
    mo = rexf.search(dataframe)
    if mo == True:
        df = pd.read_csv(dataframe)
    else:
        df = pd.read_excel(dataframe)
    return df

然后,我使用一个名为"Smoking.csv“的文件调用此函数。当我使用pd.read_csv()命令时,这个文件可以工作,但是在这里它变得狂暴,并给出了这个错误

xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found

有没有人知道这是为什么,以及我如何才能让函数按预期运行?谢谢。

EN

回答 2

Stack Overflow用户

发布于 2020-10-14 18:30:15

为此,我会避免使用正则表达式。它可以工作,但是如果你在处理路径,你应该使用一个处理路径的工具,比如pathlib:

代码语言:javascript
复制
from pathlib import Path

import pandas as pd


def ingest(filename):
    path = Path(filename)
    if path.suffix == ".csv":
        df = pd.read_csv(dataframe)
    else:
        df = pd.read_excel(dataframe)
    return df

您的正则表达式不起作用的原因是因为if语句。match对象不等于True。你可以改为使用if mo:,这是可行的。但又一次..。pathlib!

票数 1
EN

Stack Overflow用户

发布于 2020-10-14 18:31:10

像这样的函数应该能做到这一点:

代码语言:javascript
复制
def ingest(file_name):
   if file_name.endswith('.csv'):
      df = pd.read_csv(file_name)
   else:
      df = pd.read_excel(file_name)
   return df
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64351316

复制
相关文章

相似问题

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