簡體   English   中英

(1)TypeError: 不能連接類型為'的object<class 'collections.ordereddict'> '; 只有系列和 DataFrame 對象有效 (2)</class>

[英](1)TypeError: cannot concatenate object of type '<class 'collections.OrderedDict'>'; only Series and DataFrame objs are valid (2)

我創建了一些簡單的代碼,將所有 Excel 文件復制並粘貼到具有相同格式和列名的同一文件夾中的目錄中......

Excel 文件是 .xlsx 類型,因為該文件包含 3 張工作表,所以現在我有 3 張工作表,分別稱為 GSM、UMTS 和 LTE,並且此工作表名稱在所有工作表中都相同。 現在我需要將 GSM 表中的數據、UMTS 中的數據和 LTE 中的數據復制到新表中的每個自己的數據中,然后刪除重復項.....

因為我還需要更改列的顏色或將其保持為與源代碼和文本樣式等相同的樣式...

所以這是我的代碼:

import pandas as pd
import os

basepath = r'C:\Users\mwx825326\PycharmProjects\MyExcelCombine\myCDD Combine'
files = list(filter(lambda x: '.xlsx' in x, os.listdir(basepath)))
alldf = pd.DataFrame()
for f in files:
    df= pd.read_excel(f"{basepath}/{f}",encoding='latin-1', sheet_name=None)
    alldf = pd.concat([alldf,df]).drop_duplicates(keep=False)

alldf.to_excel("1- CDD Total12.xlsx")

這是我的錯誤

Traceback (most recent call last):
  File "C:/Users/mwx825326/PycharmProjects/MyExcelCombine/CombineTool.py", line 9, in <module>
    alldf = pd.concat([alldf,df]).drop_duplicates(keep=False)
  File "C:\Users\mwx825326\PycharmProjects\MyExcelCombine\venv\lib\site-packages\pandas\core\reshape\concat.py", line 255, in concat
    sort=sort,
  File "C:\Users\mwx825326\PycharmProjects\MyExcelCombine\venv\lib\site-packages\pandas\core\reshape\concat.py", line 332, in __init__
    raise TypeError(msg)
TypeError: cannot concatenate object of type '<class 'collections.OrderedDict'>'; only Series and DataFrame objs are valid

Process finished with exit code 1

這是我的床單看起來像

mydir = (os.getcwd()).replace('\\', '/') + '/'

gsm_cdd_total = pd.read_excel(r'' + mydir + '1- CDD Total.xlsx' ,sheet_name='GSM')
umts_cdd_total = pd.read_excel(r'' + mydir + '1- CDD Total.xlsx' ,sheet_name='UMTS')
lte_cdd_total = pd.read_excel(r'' + mydir + '1- CDD Total.xlsx' ,sheet_name='LTE')

gsm_generate = pd.read_excel(r'' + mydir + 'GUL CDD20191008021501.xlsx' ,sheet_name='GSM')
umts_generate = pd.read_excel(r'' + mydir + 'GUL CDD20191008021501.xlsx' ,sheet_name='UMTS')
lte_generate = pd.read_excel(r'' + mydir + 'GUL CDD20191008021501.xlsx' ,sheet_name='LTE')

而這個我的 excels xlsx看起來像它有三個主工作表曾經工作表有它自己的數據xlsx 看起來像

那么如果有人知道如何更新與每張紙相關的數據以及如何解決這個問題?

當您使用sheet_name=None運行read_excel時,結果是一個字典sheet_name : DataFrame )。

所以:

  • 不要在這里使用df作為目標變量(這是誤導),
  • 添加另一個循環遍歷鍵/數據幀(使用items )或單獨數據幀(使用values ),
  • 在此循環中,您可以將每個 DataFrame (從當前工作表中讀取)與alldf 合並

就像是:

for f in files:
    # Here the result is a dictionary of DataFrames
    dct = pd.read_excel(f"{basepath}/{f}",encoding='latin-1', sheet_name=None)
    # Process each DataFrame from this dictionary
    for df in dct.values()
        alldf = pd.concat([alldf,df]).drop_duplicates(keep=False)

另一種可能性:如果您的每個 Excel 文件只有一張要讀取的工作表,您可以運行原始代碼,但沒有sheet_name參數(其默認值為0 ,表示僅從第一張工作表讀取並返回 DataFrame )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM