Python Pandas中的嵌套迭代
我有一个大约25页的文件,每一页包含5-30列,标题是系统名。我想遍历大约170个系统的列表(该列表位于主文件中的一张表上),并在每个系统中搜索每个选项卡,以匹配系统作为标题的列。我有下面的代码,它在第一次迭代中工作得很好,但是由于某种原因,在它循环遍历所有的表并移动到第二个系统之后,它会提取表名而不是第二个系统名。有人知道我做错了什么吗Python Pandas中的嵌套迭代,python,pandas,Python,Pandas,我有一个大约25页的文件,每一页包含5-30列,标题是系统名。我想遍历大约170个系统的列表(该列表位于主文件中的一张表上),并在每个系统中搜索每个选项卡,以匹配系统作为标题的列。我有下面的代码,它在第一次迭代中工作得很好,但是由于某种原因,在它循环遍历所有的表并移动到第二个系统之后,它会提取表名而不是第二个系统名。有人知道我做错了什么吗 import pandas as pd matrix = pd.ExcelFile('file') names_tab = pd.read_excel(ma
import pandas as pd
matrix = pd.ExcelFile('file')
names_tab = pd.read_excel(matrix, sheet_name='Name_Test')
sheets_list = {}
for (y, sysRows) in names_tab.iterrows():
print(sysRows['header'])
for sheets in matrix.sheet_names[1:]:
sheets_list['{}'.format(sheets)] = pd.read_excel(matrix, sheet_name='{}'.format(sheets), skiprows=2)
print(sheets)
for column in sheets_list[sheets]:
if column == sysRows['header']:
for idx, row in sheets_list[sheets][column].iteritems():
if sheets_list[sheets].iloc[idx][column] == 'x':
print('{} has X in row {} column {} on sheet {}'
.format(sysRows['header'], idx, column, sheets))
elif sheets_list[sheets].iloc[idx][column] == 'X':
print('{} has X in row {} column {} on sheet {}'
.format(sysRows['header'], idx, column, sheets))
print(column + ' works')
else:
print(column + ' doesnt work')
我不完全确定这是否与您尝试实现的结果相同,但希望这是一个起点(我怀疑您需要4个循环):
也许您可以提供一个。是的,我认为4 for循环并不是最有效的方法,但它是一个相对较小的数据集,因此应该仍然可以快速运行。最后,我将上面的部分更新为下面的内容,现在可以正常工作了<代码>而sysCount<164:sys\u list.append(名称\u tab.iloc[sysCount,0])sysCount=sysCount+1
import pandas as pd
import numpy as np
names_tab = pd.DataFrame({'header':['System1','System2','System3'], 'some_other_column':['foo','bar','foobar']})
sheet1 = pd.DataFrame({'System1':['x','X'], 'System2':['x','X'], 'System4':['X','x']})
sheet2 = pd.DataFrame({'System2':['X','x'], 'System8':['x','x'], 'System3':['x','X']})
sheets = [sheet1, sheet2]
for i, sheet in enumerate(sheets):
print("Sheet", i + 1)
common_columns = list(set(sheet.columns.tolist()).intersection(names_tab['header'].tolist()))
df = sheet[common_columns]
print("Here are all the 'x' values in Sheet", i + 1)
print(df.where(df == 'x'))
# To get your behavior
positions = np.where(df.values == 'x')
for idx, col in positions:
print('{} has x in row {} column {} on sheet {}'.format(df.columns[col], idx, col, str(i+1)))