Python 熊猫:如何在同一工作表中写入现有xlsx文件中的数据,而不覆盖旧数据

Python 熊猫:如何在同一工作表中写入现有xlsx文件中的数据,而不覆盖旧数据,python,pandas,csv,readfile,Python,Pandas,Csv,Readfile,我现在有一个大的csv文件(18GB),我想分块读取,然后处理它 我这里有两个问题: 由于csv文件的总长度不能按chunksize划分为整数,如何检查最后一个块是否包含NaN rowLength = 0 #for 1st chunk rowLength = rowLength + chunksize 如何在不覆盖旧数据的情况下将新数据写入现有xlsx文件 代码如下: chunkSize=6666800 periode=333340 for chu

我现在有一个大的csv文件(18GB),我想分块读取,然后处理它

我这里有两个问题:

  • 由于csv文件的总长度不能按chunksize划分为整数,如何检查最后一个块是否包含NaN

  • rowLength = 0                        #for 1st chunk
    rowLength = rowLength + chunksize
    
  • 如何在不覆盖旧数据的情况下将新数据写入现有xlsx文件

  • 代码如下:

    chunkSize=6666800
    periode=333340
    for chunk in pd.read_csv('/Users/gaoyingqiang/Desktop/D970_Leistung.csv',delimiter=';',encoding='gbk',iterator=True,chunksize=chunkSize):
        U1=chunk['Kanal 1-1 [V]']
        I1=chunk['Kanal 1-2 [V]']
        c=[]
        if chunk.isnull.values.any():
            break #here I tried to check the last chunk whether it contains NaN or 0 by check the last elements in U1 to avoid the ZeroDivisionError. But the error was like AttributeError: 'function' object has no attribute 'values'
        for num in range(0,chunkSize, periode):
            lu = sum(U1[num:num + periode] * U1[num:num + periode]) / periode
            li = sum(I1[num:num + periode] * I1[num:num + periode]) / periode
            lui = sum(I1[num:num + periode] * U1[num:num + periode]) / periode
            c.append(180 * mt.acos(2 * lui / mt.sqrt(4 * lu * li)) / np.pi)
            lu = 0
            li = 0
            lui = 0
    
    book=load_workbook('/Users/gaoyingqiang/Desktop/Phaseverschiebung_1.xlsx')
    writer=pd.ExcelWriter('/Users/gaoyingqiang/Desktop/Phaseverschiebung_1.xlsx',engine='openpyxl')
    writer.book=book
    writer.sheets=dict((ws.title,ws) for ws in book.worksheets)
    
    phase = pd.DataFrame(c)
    phase.to_excel(writer,'Main')
    writer.save() #I found it keeps overwriting.
    
    以下是数据的结构:

    如果chunk.isnull.values.any()出现了一个错误

    如果我不做这个检查,然后


    那么哪里出错了呢?

    如果您想将所有块写入同一张工作表,请尝试以下代码:

    定义变量rowLength,对于第一个区块,rowLength应为零,并按chunksize递增该值

    rowLength = 0                        #for 1st chunk
    rowLength = rowLength + chunksize
    
    然后通过指定startrow将块写入excel

    phase = pd.DataFrame(c)
    phase.to_excel(writer,'Main', startrow=rowLength, index=False)
    

    pandas到excel以供参考。

    如果要将所有块写入同一张工作表,请尝试以下代码:

    定义变量rowLength,对于第一个区块,rowLength应为零,并按chunksize递增该值

    rowLength = 0                        #for 1st chunk
    rowLength = rowLength + chunksize
    
    然后通过指定startrow将块写入excel

    phase = pd.DataFrame(c)
    phase.to_excel(writer,'Main', startrow=rowLength, index=False)
    

    pandas to_excel供您参考。

    如果chunck.isnull.values.any()表示AttributeError:“function”对象没有属性“values”,则可以找到检查nans的可能重复项。那是什么?你能提供一个带有NaN的数据块的示例数据帧吗?就像在一个数据块中有10行,前8行包含数据,后两行不包含任何内容。这就像当你有一个10行的数据,并且你每3行读取一次,第四个数据块将只包含一行,其他3行为空。如果chunck.isnull.values.any()如AttributeError所述,则可能会找到检查NaN的重复项。函数“object没有属性“values”。那是什么?你能提供一个带有NaN的数据块的示例数据帧吗?就像在一个数据块中有10行,前8行包含数据,后两行不包含任何内容。就像当你有一个10行的数据,并且你每3行读取一次,第四个数据块将只包含一行,其他3行是空的