【问题标题】:Reading and Passing Excel Filename with Pandas使用 Pandas 读取和传递 Excel 文件名
【发布时间】:2019-05-30 04:09:38
【问题描述】:

我想用 Pandas 读取 excel 文件,删除标题行和第一列,并将结果数据写入同名的 excel 文件中。我想对文件夹中的所有 excel 文件执行此操作。我已经编写了用于数据读取和写入的代码,但无法将数据保存在同名文件中。我写的代码是这样的-

import numpy as np
import pandas as pd
import os
for filename in os.listdir ('./'):
    if filename.endswith ('.xlsx'):
        df = pd.read_excel ('new.xlsx', skiprows=1)
        df.drop (df.columns [0], axis=1, inplace=True)
        df.to_csv ('new.csv', index=False)    

如何为同一文件夹中的所有 excel 文件自动编写代码?

【问题讨论】:

    标签: python excel pandas


    【解决方案1】:

    在函数read_excel 中使用变量filename,然后通过format 创建新文件名,并且可以使用DataFrame.iloc 删除第一列 - 选择没有第一列的所有列:

    for filename in os.listdir ('./'):
        if filename.endswith ('.xlsx'):
            df = pd.read_excel (filename, skiprows=1)
            df.iloc[:, 1:].to_csv('new_{}.csv'.format(filename), index=False) 
    

    glob 的另一种解决方案,可以指定扩展名:

    import glob
    
    for filename in glob.glob('./*.xlsx'):
        df = pd.read_excel (filename, skiprows=1)
        df.iloc[:, 1:].to_csv('new_{}.csv'.format(filename), index=False)   
        #python 3.6+    
        #df.iloc[:, 1:].to_csv (f'new_{filename}.csv', index=False)   
    

    【讨论】:

    • 一如既往的好,顺便说一句,您是否知道任何文档可以找到诸如f'' 代表formatr'' 代表正则表达式等的缩写。
    • @meW - 纯 python 对我来说并不容易,请尝试询问 jpp :)
    • 好的会和他核实。
    • 工作就像一个魅力,谢谢!虽然,它采用全名,包括 .xlsx 后缀,因此生成的名称类似于 new.xlsx.csv
    • @Soelem Aafnan Yeham 所以添加[:-5] like df.iloc[:, 1:].to_csv('new_{}.csv'.format(filename[:-5]), index=False) 删除最后5个字母或使用df.iloc[:, 1:].to_csv('new_{}.csv'.format(os.path.splitext(filename)[0])), index=False)
    【解决方案2】:

    如下尝试读取多个文件:

    import pandas as pd
    import glob
    
    # Read multiple files into one dataframe along with pandas `concat`
    # if you have path defined like `/home/data/` then you can use `/home/data/*.xlsx` otherwise you directly mention the path.
    
    df = pd.concat([pd.read_excel(files, sep=',', index=False, skiprows=1) for files in glob.glob("/home/data/*.xlsx")])
    

    替代方案: 将多个文件读入一个数据帧

    all_Files = glob.glob('/home/data/*.xlsx')
    
    df = pd.concat((pd.read_excel(files, sep=',', index=False, skiprows=1) for files in all_Files))
    

    【讨论】:

      猜你喜欢
      • 2018-10-24
      • 2016-02-01
      • 1970-01-01
      • 2023-02-10
      • 1970-01-01
      • 2013-06-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多