【问题标题】:How to split a large excel file using Pandas?如何使用 Pandas 拆分大型 Excel 文件?
【发布时间】:2018-04-12 17:33:12
【问题描述】:

我尝试了以下方法(pd 是 pandas):

 for i, chunk in pd.read_excel(os.path.join(INGEST_PATH,file), chunksize=5):

但我收到此错误:

NotImplementedError: chunksize keyword of read_excel is not implemented

我尝试过搜索其他方法,但大多数都是针对 CSV 文件,而不是 xlsx,我也有 pandas 版本 0.20.1
任何帮助表示赞赏。

【问题讨论】:

  • 您尝试过这些解决方案吗? stackoverflow.com/questions/38623368/…
  • 我不熟悉chunksize。一种可能性,您可以先将 excel 读入数据框,然后使用 numpy.array_split 或类似的东西拆分数据框的索引
  • @RileyHun 我都试过了,得到相同的块大小错误。
  • @zyxue 你能举个例子吗?

标签: python pandas


【解决方案1】:
df = pd.read_excel(os.path.join(INGEST_PATH,file))

# split indexes
idxes = np.array_split(df.index.values, 5)

chunks = [df.ix[idx] for idx in idxes]

【讨论】:

    【解决方案2】:

    上述解决方案对我不起作用,因为文件没有被正确拆分并导致省略最后几行。实际上它给了我一个错误,说不等分或类似的东西。

    所以我写了以下内容。这适用于任何文件大小。

    enter code here
    url_1=r'C:/Users/t3734uk/Downloads/ML-GooGLECRASH/amp_ub/df2.csv'
    target_folder=r'C:\Users\t3734uk\Downloads\ML-GooGLECRASH\amp_ub'
    df = pd.read_csv(url_1)
    
    rows,columns=df.shape
    
    
    
    
    def calcRowRanges(_no_of_files):
        row_ranges=[]
        interval_size=math.ceil(rows/_no_of_files)
        print('intrval size is ----> '+ '{}'.format(interval_size))
        for n in range(_no_of_files):
            row_range=(n*interval_size,(n+1)*interval_size)
        #    print(row_range)
            if row_range[1] > rows:
                row_range=(n*interval_size,rows)
        #    print(row_range)
    
            row_ranges.append(row_range)
        return row_ranges
    
    
    def splitFile(_df_,_row_ranges):
        for row_range in _row_ranges:
            _df=_df_[row_range[0]:row_range[1]]
            writer = pd.ExcelWriter('FILE_'+str(_row_ranges.index(row_range))+'_'+'.xlsx')
    
            _df.to_excel(writer)
    
    
    
    def dosplit(num_files):
        row_ranges=calcRowRanges(num_files)
        print(row_ranges)
        print(len(row_ranges))
        splitFile(df,row_ranges)
    
    dosplit(enter_no_files_to_be_split_in)
    

    重新考虑以下功能更直观:

    def splitFile2(_df_,no_of_splits):
    _row_ranges=calcRowRanges(no_of_splits)
    for row_range in _row_ranges:
        _df=_df_[row_range[0]:row_range[1]]
        writer = pd.ExcelWriter('FILE_'+str(_row_ranges.index(row_range))+'_'+'.xlsx')
    
        _df.to_excel(writer)enter code here
    

    【讨论】:

      猜你喜欢
      • 2017-05-10
      • 2014-04-10
      • 2021-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-24
      • 1970-01-01
      相关资源
      最近更新 更多