pandas表连接

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pandas表连接相关的知识,希望对你有一定的参考价值。

参考技术A Pandas Dataframe有三种连接方法,分别是merge,join,concat。

merge相当于SQL中的join。通过在两个Dataframe中共有的列或索引进行合并。
通过on参数指定连接的共有列名或索引名,how参数指定连接方式为left、right、outer、inner(默认)。如果不指定on参数,则默认在两个Dataframe的列交集作为连接键。
对于非公有列,采用left_on、right_on分别制定两个Dataframe用于连接的列。

join方法也用来横向连接Dataframe,与merge类似。但主要基于行索引进行合并。
在不指定on参数的时候,默认按照行索引进行简单合并。类似于axis=1时的concat方法。

如果希望使用列进行连接,需要将列设置为行索引在进行连接。有如下两种方式。

concat则用来堆叠连接Dataframe。
参数axis用来指定堆叠方向。默认为0,沿行索引方向(纵向)堆叠,1则沿列方向。
通过join参数,指定用inner、outer方式来处理堆叠方向外的轴方向上索引的处理方式。

此外,常用的参数还包括ignore_index,用来决定是否保留原Dataframe中的索引。

在 Pandas 中连接 Excel 文件表,以 CSV 格式每 1 行将大型 Pandas 数据框导出到新的 Excel 文件。自动化?

【中文标题】在 Pandas 中连接 Excel 文件表,以 CSV 格式每 1 行将大型 Pandas 数据框导出到新的 Excel 文件。自动化?【英文标题】:Concatenate Excel File Sheets in Pandas, Exporting Large Pandas Data Frame to new Excel files every 1 mill rows in CSV format. Automation? 【发布时间】:2021-12-23 15:44:38 【问题描述】:

我有一个包含多张工作表的 excel 文件。我正在尝试将所有工作表放入一个文件中。因此,首先我将文件读入 Jupyter Notebook 并将工作表连接到 1 个数据框中。看起来 .to_excel 方法可以制作单个 excel 文件。

如何让 pandas 将其导出为 CSV 而不是 xlsx?另外,有没有办法让它在第 100 万行中断并为接下来的 100 万行开始一个新的 Excel 文件(因为 Excel 有行限制)?

另外一点,想知道如何自动化这个过程?我假设一个 for 循环将是我想要完全用于该过程的函数。

最后,将其保存在 xlsx 文件中不允许我打开该文件。此外,当我将其转换为 csv 时,它会返回与我的文件完全不同的乱码。

我目前的代码:

pip install pandas
import pandas as pd

Pipeline_df = pd.concat(pd.read_excel('PandasToExcel.xlsx', sheet_name = None), ignore_index = True)
Pipeline_writer = pd.ExcelWriter('Pipeline_output.xlsx', engine = 'xlsxwriter')
Pipeline_writer.save()

【问题讨论】:

请提供足够的代码,以便其他人更好地理解或重现问题。 【参考方案1】:

Yo 可以直接使用 to_csv 并计算要写入的块。可能已经有这个库了,但是我用过这个。

import math
df = pd.DataFrame('dataseet':range(1,1000500))

num_rows = df.shape[0]
chunk_size = 1000000
chunks = math.ceil(num_rows / chunk_size)

for i in range(chunks):
    dftowrite = df[chunk_size*i : chunk_size*(i+1)]
    dftowrite.to_csv('filechunk_.csv'.format(i))

【讨论】:

此代码有效,但文件输出只是从 1 到 100 万的单行。我需要获取我拥有的 xlsx 文件。连接该文件中的工作表并将它们导出到新的 csv 文件。但由于 Excel 的限制,一次需要 100 万多行数据。我一定在这里遗漏了一些东西。我必须承认我对 Python 的了解不够,无法解释您的代码。 你说你有一个连接的数据框???只需使用您的 df 而不是提供的示例(因为我无权访问您的数据进行测试)。 好的,我这样做了:df1 = pd.DataFrame(new_df[0:1000000]) df2 = pd.DataFrame(new_df[1000001:1016385]) df1.to_csv('new_example', index =假) df2.to_csv('new_example2', index = False) 。输出被乱码乱码。因此,转到存储文件的位置(C 驱动器)并在记事本中“打开”。将记事本保存为 CSV。现在关心的是如何让它自动化?获取 Excel 文件、将工作表连接到 DF、将连接的 DF 导出到 CSV 的函数。在 1milli 行处,一个新的 CSV 开始 如果您不知道如何读取 excel 文件并连接 df,那么您应该提出一个新问题。打开 csv 时出现问题:您没有将 .csv 放在文件名中。我一般建议您花一些时间搜索 *** 以满足您的需求。你问的每件事都有几个相似的例子。 有字符限制。作为一个新手,试图解释所有细节是很困难的。但是,我已经简化了我的问题。此时,我只需要构建函数来执行我的工作。现在我可以读取和连接我的 Excel 文件的工作表。然后,我可以将 concat 文件拆分为多个 df 100 万。然后,将 df 转换为 CSV。但是,当我将其放入函数时,由于函数参数中的错误,它无法正常工作。这是我的功能: defautomated_excel(excel_automated): 我尝试输入 (excel_auto.xlsx) 甚至使用 " " 并且它被标记

以上是关于pandas表连接的主要内容,如果未能解决你的问题,请参考以下文章

Pandas:使用多张工作表导入 xlsx,将列添加到每个 df 及其所属工作表的名称,将具有相同列数的 df 连接起来

Pandas-多表操作

pandas 连接数据库直接查表建立dataframe。loc,sort_values数据清洗操作

如何在 python Pandas 中执行/解决条件连接?

使用pandas将两表进行关联查询merge()-横向合并

python使用pandas通过聚合获取时序数据的最后一个指标数据(例如长度指标时间指标)生成标签并与原表连接(join)进行不同标签特征的可视化分析