Я пытаюсь просмотреть список строк из отфильтрованного листа Excel и распечатать значения из нескольких столбцов в разные строки одного и того же столбца на новом листе Excel.Исходные данные содержат три строки с пятью столбцами, которые я хочу напечатать на новом листе.Вот код, который у меня есть:
import xlsxwriter
import sys
import pandas as pd
import xlrd
import itertools
# Create a workbook and add a worksheet.
workbook = xlsxwriter.Workbook('test12.xlsx')
worksheet = workbook.add_worksheet()
# Add header line
header1 = 'Block name'
header2 = 'BlockID'
header3 = 'Key'
header4 = 'Value'
header5 = 'Unit of value'
worksheet.set_header(header1)
worksheet.set_header(header2)
worksheet.set_header(header3)
worksheet.set_header(header4)
worksheet.set_header(header5)
name = 'V_2017'
# Read from Experiments file and filter to relevant Experiments
df2 = pd.read_excel("\Users\ingvieb\Desktop\Source_tables\Experiments.xlsx")
mask = df2['Source'].apply(lambda value: name in value)
df2 = df2[mask]
groups_exp = df2['Experiment_name']
groups_age = df2['Age']
groups_strain = df2['Strain']
groups_species = df2['Species']
groups_status = df2['Animal_status']
# Define where to find values
exp = str(df2['Experiment_name'])
age = str(df2['Age'])
strain = str(df2['Strain'])
species = str(df2['Species'])
status = str(df2['Animal_status'])
# Define block setup
for exp, age, strain, species, status in itertools.izip(groups_exp, groups_age, groups_strain, groups_species, groups_status):
subjectgroup = (
['SubjectGroup', exp, '_ID', exp, ''],
['SubjectGroup', exp, 'age category', age, ''],
['SubjectGroup', exp, 'strain', strain, ''],
['SubjectGroup', exp, 'species', species, ''],
['SubjectGroup', exp, 'disability/disease', status, '']
)
### Write out excel sheet
# Start from the first cell. Rows and columns are zero indexed.
row = 0
col = 0
# Iterate over the data and write it out row by row.
worksheet.write(row, col, header1)
worksheet.write(row, col +1, header2)
worksheet.write(row, col +2, header3)
worksheet.write(row, col +3, header4)
worksheet.write(row, col +4, header5)
row = 1
col = 0
for exp, age, strain, species, status in itertools.izip(groups_exp, groups_age, groups_strain, groups_species, groups_status):
for blockname, blockID, key, value, unit in (subjectgroup):
worksheet.write(row, col, blockname)
worksheet.write(row, col + 1, blockID)
worksheet.write(row, col +2, key)
worksheet.write(row, col +3, value)
worksheet.write(row, col +4, unit)
row += 1
workbook.close()
На выходном листе я получаю правильное количество строк (в три раза больше пяти интересующих столбцов), но я получаю только одинаковые данные во всех них.Это все данные из одной строки, повторенные три раза.Код проходит только одну из моих строк три раза, и если да, то почему?
Я впервые пытаюсь написать код.Я использую Python 2.7.