Перебор списка и печать в Excel - PullRequest
0 голосов
/ 09 марта 2019

Я пытаюсь просмотреть список строк из отфильтрованного листа 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...