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

从不同文件中导入多个excel表到python中,并将它们连接成一个数据表

郭恩
2023-03-14
import pandas as pd
import os, glob
os.chdir(r'c:\Users\Documents\Files')

def files():                                 #to select the files that have RMP and WE on their name
    list_files= pd.Series()
    for file in glob.glob('RMP*WE*'):
        data= pd.Series(file)
        list_files= list_files.append(data, ignore_index=True)
    return list_files
a= files()
print("This is the variable a\n", a)

def extract_tab():                       #to concatenate the sheet called Metrics that all files have
    frame_files= pd.DataFrame()
    try:
        for file in a:
            data= pd.read_excel(file,sheet_name='Metrics')
            frame_files= frame_files.append(data, ignore_index=True)
    except:
        pass
    return  frame_files

b= extract_tab()

print("This is b\n",b)

共有1个答案

戎劲
2023-03-14

IIUC,你可以在你的目录上做一个列表comp。

如果使用Python 3.4+

from Pathlib import Path
path_ = 'c:\Users\Documents\Files'

dfs = [pd.read_excel(f,sheet_name='metrics') for f in Path(path_).glob('RMP*WE*')]

df = pd.concat(dfs)

或者如果只能使用OS模块:

os.chdir('c:\Users\Documents\Files')
files = glob.glob('RMP*WE*')
dfs = [pd.read_excel(f,sheet_name='metrics') for f in files]
df = pd.concat(dfs)
def exlude_sheet(excel_list, sheet):
    """
    takes two arguments:
    1. A list of excel documents
    2. The name of your sheet.
    3. Returns a single data frame after 
    working through your list of excel objects. 
    """
    from xlrd import XLRDError
    df_lists = []
    for file in excel_list:
        try:
            file_df = pd.read_excel(file, sheet_name=sheet)
            df_lists.append(file_df)
        except (XLRDError) as e:
            print(f"{e} skipping")
            continue
    try:
        return pd.concat(df_lists)
    except ValueError as err:
        print("No Objects Matched")
xlsx = [f for f in Path(path_).glob('RMP*WE*')]
df = exlude_sheet(xlsx,sheet='Metrics')
out:
No sheet named <'Metrics'> for doc_1 skipping
No sheet named <'Metrics'> for doc_final skipping
print(df)
      Column_A  data
0           0     0
1           1     1
2           2     2
3           3     3
4           4     4
exlude_sheet(xlsx,'foobar')
No sheet named <'foobar'> skipping
No sheet named <'foobar'> skipping
No sheet named <'foobar'> skipping
No Objects Matched
 类似资料:
  • 我想从一个目录中读取几个excel文件到pandas中,并将它们连接到一个大的数据帧中。不过我还没弄明白。我需要一些关于for循环和构建级联数据帧的帮助:

  • 我想从一个目录中读取几个csv文件到pandas中,并将它们连接到一个大的数据帧中。不过我还没弄明白。以下是我目前掌握的情况: 我想我需要在for循环中得到一些帮助???

  • 我在Laravel 7中使用maatsite的Excel导入库将文件分析和支持数据导入到“分析”数据库表中,它工作得很好。但是,在我选择要导入的Excel文件的视图页面上,我有一个选择下拉和输入文本。我在各自的模型中创建了has很多和属性关系。 处理控制器: 利润进口: profiling_import.blade: 在Excel文件中: 视图: 问题是pemohon、品牌和用户数据没有填入数据库

  • 我在从两个表中检索数据然后列出它们时遇到了一些问题。我想将用户的提要帖子和他们喜欢的活动全部列在一个列表中。 提要-用户帖子表 我想做的是:在活动墙中列出提要和类似用户的活动。 所以它应该输出如下(按时间戳desc排序): “这是用户A的帖子” 我的当前SQL: 然而,我的问题是我不知道如何链接这两个表,因为我的“feed”中的ID与“likes”中的ID不同

  • 我有多个csv文件(每个文件包含N行(例如,1000行)和43列)。 我想把文件夹中的几个csv文件读入pandas,并将它们合并到一个数据帧中。 不过我还没能弄明白。 问题是,数据帧的最终输出(即,)将所有列(即43列)合并到代码的一列(见附图)屏幕截图中 选定行和列的示例(文件一) 选择的行和列(文件二)Client_IDClient_NamePointer_of_Bins日期权重C00000

  • 目前,我只能阅读一个excel文档,并用我得到的代码编写相同的文档。现在我想读取多个excel文档并将数据写入其中。现在我得到了一个清晰的代码,这样做到一个文档,但这不是我想要的。我理解我目前得到的代码的结构,所以我更喜欢继续使用它。如何使用函数和函数来实现这一点? 这是我到目前为止所拥有的: 不是很好的编码...但它有效...