excel - 借助同一列数据将两个Excel工作表数据合并为一个
问题描述
Excel1
Column1 Column2 Column3
1 A [xyz-5536]A
2 B [xyz-5537]B
3 C [xyz-5538]C
4 D [xyz-5539]D
这是一种具有不同项目的可追溯性报告
Excel2
Column1 Result1 Result2
[xyz-5536]A Pass fail
[xyz-5537]B fail pass
[xyz-5538]C pass fail
[xyz-5539]D fail pass
如上所述,我有两个 excel,我想创建一个带有结果的新工作表,因为 excel1 将通过在方括号中映射 ID 来附加数据并附加 result1 和 result2
我通过宏尝试过
Column1 Column2 Column3 Result1 Result2
1 A [xyz-5536]A pass fail
2 B [xyz-5537]B fail pass
3 C [xyz-5538]C pass fail
4 D [xyz-5539]D fail pass
它应该像上表一样。它应该一次只引用一项column3
。我是 Python 新手。
解决方案
一种简单的方法是使用pandas
模块。
你可以:
read_excel
使用方法(doc)读取一个 excel 文件。你- 将您的数据与
merge
方法合并(doc) drop
使用方法删除重复的列(doc)to_excel
使用方法(doc)将数据导出到新的 excel 文件
这里的代码假设你有两个 excels 文件:
# import modules
import pandas as pd
# filename
filename_1 = "Excel1.xlsx"
filename_2 = "Excel2.xlsx"
# Pandas files
df_1 = pd.read_excel(filename_1)
df_2 = pd.read_excel(filename_2)
print(df_1)
# Column1 Column2 Column3
# 0 1 A [xyz-5536]A
# 1 2 B [xyz-5537]B
# 2 3 C [xyz-5538]C
# 3 4 D [xyz-5539]D
print(df_2)
# Column1 Result1 Result2
# 0 [xyz-5536]A Pass fail
# 1 [xyz-5537]B fail pass
# 2 [xyz-5538]C pass fail
# 3 [xyz-5539]D fail pass
# Merge the two dataframe
df_new = df_1.merge(df_2, left_on="Column3",
right_on="Column1", suffixes=('', '_df2'))
print(df_new)
# Column1 Column2 Column3 Column1_df2 Result1 Result2
# 0 1 A [xyz-5536] A[xyz-5536]A Pass fail
# 1 2 B [xyz-5537] B[xyz-5537]B fail pass
# 2 3 C [xyz-5538] C[xyz-5538]C pass fail
# 3 4 D [xyz-5539] D[xyz-5539]D fail pass
# Remove the duplicated columns
df_new = df_new.drop(["Column1_df2"], axis=1)
print(df_new)
# Column1 Column2 Column3 Result1 Result2
# 0 1 A[xyz-5536]A Pass fail
# 1 2 B[xyz-5537]B fail pass
# 2 3 C[xyz-5538]C pass fail
# 3 4 D[xyz-5539]D fail pass
# Export to a new xlsx file
df_new.to_excel("new_file.xlsx", index=False)
推荐阅读
- reactjs - 如何在 ant design datapicker 中为特定日期自定义日期颜色?
- flutter - 在 dart 服务器端将 mongodb 数据转换为 json 时遇到问题
- python - 使用python检测RTP信号的存在
- r - 如何使R中igraph右侧的箭头线更短?
- c++ - 带有 std::function 的 C++ std::list:调用 remove() 不会构建
- java - 如何解决无法解析的日期“”
- codeigniter - 使用 like() codeigniter 4 将日期转换为 mothname、day、year
- android - 无法访问片段视图绑定中的工具栏
- machine-learning - Resnet 50 和 yolo 或 rcnn 有什么区别?
- raspberry-pi3 - 命令 i2cdump 删除了我的 stm32 地址