【发布时间】:2020-03-30 08:44:47
【问题描述】:
您好,我有 2 个 excel 文件,其中一个是包含一些名称(col A,excel 1)和值的表格,另一个包含系统发育树,所有数据存储在 6 列选项卡中分隔(excel 2 )。
Xlsx 1:
g__曼海姆
g__消化球菌
g__unspecific_Proteobacteria
g__不动杆菌
Xlsx 2(6 列):
第 1 行:
d__细菌 p__Proteobacteria c__Gammaproteobacteria o__Enterobacterales f__Enterobacteriaceae g__Salmonella s__
第 2 行:
d__细菌 p__Firmicutes c__Bacilli o__Lactobacillales f__Streptococcaceae g__Streptococcus s__
第 3 行:
d__细菌 p__Actinobacteriota c__Actinobacteria o__Mycobacteriales f__Mycobacteriaceae g__Mycobacterium s__
第 4 行:
d__细菌 p__Proteobacteria c__Gammaproteobacteria o__Enterobacterales f__Enterobacteriaceae g__Klebsiella s__
第 5 行:
d__Bacteria p__Proteobacteria c__Gammaproteobacteria o__Pseudomonadales f__Moraxellaceae g__Acinetobacter s__
我想要做的是,在 xlsx 2 的每一行中搜索 xlsx 1 中的名称,然后如果在 6 列中的任何一个上找到完全匹配,则复制整行(总共 6 列)和用此数据替换 xlsx 1 中的名称(1 列,也应保持不变)。这可以通过搜索和替换功能手动完成,但由于数据量巨大,我正在尝试寻找另一种方法。
我正在尝试在 pandas 的帮助下解决这个问题,并且已经尝试了一些东西。目前我被困在这里,因为我什至无法在第二个 xlsx 上找到我的匹配数据。
import sys
import pandas as pd
analysis_data_df = pd.read_excel('Mund_Biome_Raw_Data.xlsx', sheet_name='Genus', header=None, usecols='A', skiprows=3)
analysis_data = analysis_data_df.values.tolist()
# print(List1)
source_data_df = pd.read_excel('170519_taxonomy_in_qiime.xlsx', sheet_name='97_otu_taxonomy', header=None)
source_data = source_data_df.values.tolist()
# print(list_2)
matching = [s for s in source_data if any(xs in s for xs in analysis_data)]
print(matching)
非常感谢任何形式的帮助!
【问题讨论】:
-
更具体:如果 source_data (第一个 Excel 文件)中的一行在 analysis_data (第二个 Excel 文件)中有几行包含它,你应该怎么做?您是否每次都在同一行索引中搜索?
-
编辑我的帖子更具体。
标签: python python-3.x pandas