当前位置: 首页 > 知识库问答 >
问题:

如何在python中改进我的append和读取excel For循环

江俊能
2023-03-14

希望你能帮助我。

我有一个文件夹,里面有几个结构相似的. xlsx文件(注意,有些文件可能大于50MB)。我想把它们组合在一起,(最终)把它们发送到数据库。但是在那之前,我需要提高这段代码的性能,因为有时处理所有这些文件需要很多时间。

问题代码如下:

df_list = []    
for file in location:
    df_list.append(pd.read_excel(file, header=0, engine='openpyxl'))

df_concat = pd.concat(df_list)

有什么建议吗?

我在某处读到将 Excel 文件转换为 CSV 可能会提高性能,但我应该在附加文件之前还是在连接所有内容之后执行此操作?考虑到df_list是一个列表,我可以进行转换吗?

共有2个答案

宗政永望
2023-03-14

如你所说,在熊猫中阅读excel文件很慢,你应该看看这个答案。在运行python脚本之前,它基本上使用vbscript将excel文件转换为csv文件,对于python脚本来说,CSV文件的读取速度更快。

为了更具体地回答你问题的第二部分,你应该在用熊猫加载Excel文件之前将其转换为csv。read_excel功能是慢速部分。

龙隐水
2023-03-14

我找到了使用 xlsx2csv 的解决方案

xlsx_path = './data/Extract/'
csv_path = './data/csv/'
list_of_xlsx = glob.glob(xlsx_path+'*.xlsx')


for xlsx in list_of_xlsx:
    # Extract File Name on group 2 "(.+)"
    filename = re.search(r'(.+[\\|\/])(.+)(\.(xlsx))', xlsx).group(2)
    # Setup the call for subprocess.call()
    call = ["python", "./xlsx2csv.py", xlsx, csv_path+filename+'.csv']
    try:
        subprocess.call(call) # On Windows use shell=True
    except:
        print('Failed with {}'.format(filepath)

outputcsv = './data/bigcsv.csv' #specify filepath+filename of output csv

listofdataframes = []
for file in glob.glob(csv_path+'*.csv'):
    df = pd.read_csv(file)
    if df.shape[1] == 24: # make sure 24 columns
        listofdataframes.append(df)
    else:
        print('{}  has {} columns - skipping'.format(file,df.shape[1]))

bigdataframe = pd.concat(listofdataframes).reset_index(drop=True)
bigdataframe.to_csv(outputcsv,index=False)

我试图为我做这项工作,但没有成功。也许你可以让它为你工作?还是有人有什么想法?

 类似资料:
  • 本文向大家介绍如何在Python对Excel进行读取,包括了如何在Python对Excel进行读取的使用技巧和注意事项,需要的朋友参考一下   在python自动化中,经常会遇到对数据文件的操作,比如添加多名员工,但是直接将员工数据写在python文件中,不但工作量大,要是以后再次遇到类似批量数据操作还会写在python文件中吗?   应对这一问题,可以将数据写excel文件,针对excel 文件

  • 问题内容: 我正在学习python,我像这样循环循环,将json转换为字典:它可以工作,但这是正确的方法吗?谢谢 :) 这里的JSON: 这里输出: 问题答案: 总体看来还不错。 无需先读取文件,然后使用负载。您可以直接使用负载。 为此,使用i和k是不正确的。它们通常仅应用于整数循环计数器。在这种情况下,它们是关键,因此更合适的方法会更好。也许重命名为和为?传达更多信息的东西将更易于阅读和维护。

  • 问题内容: 我需要附加一个泡菜文件(因为我一次都没有整个字典)。为此,我编写了以下代码: 但是,当我加载泡菜文件时,我在那里找不到字典f的值? 有人可以建议我应该如何添加一个泡菜文件吗? 另外,像“ dbm”这样的数据库无法满足我的需求,因为我正在Windows上工作 问题答案: 腌制流完全是独立的,因此解腌将一次解腌一个对象。 因此,要释放多个流,应重复释放该文件,直到得到EOFError为止:

  • 问题内容: 在Python中,尝试对具有循环的列表执行最基本的追加功能:不知道我在这里缺少什么: 返回: 问题答案: 该函数不返回任何值(而是),它只是将值添加到用于调用该方法的列表中。 在第一个循环中,您将分配(由于不返回)给,然后在第二个循环中,它将尝试调用,因为它将引发您看到的Exception 您只需要将其更改为: 这就是所谓的 变异或破坏性 方法,即它将破坏或变异先前的对象成为一个新的(

  • 任何帮助都是非常感谢的

  • 问题内容: 现在,我知道在迭代循环中修改列表是不安全的。但是,假设我有一个字符串列表,并且我想剥离字符串本身。可变值的替换是否算作修改? 问题答案: 它被认为是不良形式。如果需要保留对列表的现有引用,请改用列表理解和切片分配。