Excel(CSV)将标题数据转换为具有重复行的行映射

2024-10-04 03:21:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有基于Excel的数据集,需要转换。在学习Python时,我会请求一个基于Python的解决方案,然后可以阅读/修改代码。我可以使用Excel或CSV输入/输出。在

我的数据就是这样的

频道条件值1值2值3(标题)
通道A条件B现场直播

通道A条件B现场飞行员直播

信道B条件C导频导频

C频道条件D现场直播

这是我想要的输出:

频道条件值(全部)状态(标题。如果输出上没有显示,我没问题)

通道A状态B值1激活

信道A状态B值2实时

信道A条件B值3导频

通道A条件B值1激活

信道A条件B值2导频

通道A条件B值3实时。。。在

基本上,它是每个“值”的通道和条件的重复,这些值应该从列标题及其自身的数据集(Live/Pilot)中获取。在

我希望得到一些帮助,因为我有大约1000行这样的转换要做

这是一张代表我想要的图片 enter image description here

编辑2:截图上有一个类型。最后3行应该读通道B,而不是通道A


Tags: csv数据代码标题状态解决方案条件频道
2条回答

尝试使用xlrd模块。比如:

import xlrd

wb = xlrd.open_workbook(path)
sheet = wb.sheet_by_index(index)

column_list = range(0, sheet.ncols)

val_name = [sheet.cell_value(rowx=0, colx=i) for i in column_list]
channel = val_name.pop(0)
condition = val_name.pop(0)

print(channel, condition, "Value *", "Status")
lines = []
for r in range(1, sheet.nrows):
    row = [sheet.cell_value(rowx=r, colx=i) for i in column_list]
    channel = row[0]
    condition = row[1]
    values = row[2:]

    lines = zip( [channel]*len(values),
                 [condition]*len(values),
                 val_name,
                 values)
    for l in lines:
        print(l)

像那样的东西应该适合这份工作。在

import csv

transformed = []
with open('excel.csv', newline='') as csvfile:
    r = csv.reader(csvfile, delimiter=' ', quotechar='|')
    for row in r:
        channel, condition, *vals = row
        for val in vals:
            transformed.append([channel, condition, val])

with open('transformed.csv', 'w', newline='') as csvfile:
    w = csv.writer(csvfile, delimiter=' ',
                            quotechar='|', quoting=csv.QUOTE_MINIMAL)
    for row in transformed:
        w.writerow(' '.join(row))

相关问题 更多 >