(1) 类型错误:无法连接类型为“<class'collections.OrderedDict'>”的对象;只有Series和DataFrame对象是有效的(2)

2024-04-19 08:23:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经创建了一些简单的代码,复制和粘贴目录中的所有Excel文件在同一个文件夹中,格式和列名相同。。。。在

Excel文件是一种.xlsx类型,因为这个文件包含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")

这是我的错误

^{pr2}$

这是我的床单看起来像

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')

这个my excelsxlsx看起来有三个主表,每个表都有自己的数据xlsx looks like

所以,如果有人知道如何更新与每张图纸相关的数据,以及如何解决这个问题呢?在


Tags: 文件数据namereadosxlsxexcelsheet
1条回答
网友
1楼 · 发布于 2024-04-19 08:23:45

当您运行read_excelwhichsheet_name=None时,结果是一个字典工作表名称数据帧)。在

所以:

  • 不要在这里使用df作为目标变量(这是误导性的)
  • 添加另一个循环迭代键/数据帧(使用) 或单独在数据帧上(使用
  • 在这个循环中,您可以合并每个数据帧(从当前 工作表) 使用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,表示 从第一个工作表中只读并返回一个数据帧)。在

相关问题 更多 >