gpt4 book ai didi

python - 如何将多行 excel 数据连接成一行?

转载 作者:行者123 更新时间:2023-11-28 18:01:46 24 4
gpt4 key购买 nike

我目前面临一个问题,我需要将下图中显示的所有数据仅放在一行中。

enter image description here

因此,我尝试使用 Python 和 Openpyxl 编写一个解析脚本,该脚本读取该行并仅在值非空或不相同时将其复制到新工作簿中。

我遇到了超出范围的错误,而且代码并没有只保留我想要的数据。我在上面花了好几个小时,所以我想我应该在这里问一下,看看我是否能摆脱困境。

我已经阅读了一些关于 Openpyxl 和关于在 python 中制作列表的文档,在 youtube 上尝试了几个视频,但没有一个完全符合我想要实现的目标。

import openpyxl
from openpyxl import Workbook

path = "sample.xlsx"
wb = openpyxl.load_workbook(path)
ws = wb.active
path2 = "output.xlsx"
wb2 = Workbook()
ws2 = wb2.active

listab = []
rows = ws.max_row
columns = ws.max_column

for i in range (1, rows+1):
listab.append([])

cellValue = " "
prevCell = " "

for c in range (1, rows+1):
for r in range(1, columns+1):
cellValue = ws.cell(row=r, column=c).value
if cellValue == prevCell:
listab[r-1].append(prevCell)
elif cellValue == "NULL":
listab[r-1].append(prevCell)
elif cellValue != prevCell:
listab[r-1].append(cellValue)
prevCell = cellValue

for r in range(1, rows+1):
for c in range (1, columns+1):
j = ws2.cell(row = r, column=c)
j.value = listab[r-1][c-1]

print(listab)

wb2.save("output.xlsx")

应该有一行包含以下信息:

ods_service_id |服务名称|服务计划名称|中央处理器 |内存 |网卡 |驱动 |

最佳答案

就我个人而言,我会选择 pandas

import pandas as pd

#Loading into pandas
df_data = pd.read_excel('sample.xlsx')
df_data.fillna("NO DATA",inplace=True) ## Replaced nan values with "NO DATA"
unique_ids = df_data.ods_service_ids.unique()

#Storing pd into a list
records_list = df_data.to_dict('records')
keys_to_check = ['service_name', 'service_plan_name', 'CPU','RAM','NIC','DRIVE']
processed = {}

#Go through unique ids
for key in unique_ids:
processed[key] = {}

#Get related records
matching_records = [y for y in records_list if y['ods_service_ids'] == key]
#Loop through records
for record in matching_records:
#For each key to check, save in dict if non null
processed[key]['ods_service_ids'] = key
for detail_key in keys_to_check:
if record[detail_key] != "NO DATA" :
processed[key][detail_key] = record[detail_key]
##Note : doesn't handle duplicate values for different keys so far


#Records are put back in list
output_data = [processed[x] for x in processed.keys()]
# -> to Pandas
df = pd.DataFrame(output_data)[['ods_service_ids','service_name', 'service_plan_name', 'CPU','RAM','NIC','DRIVE']]

#Export to Excel
df.to_excel("output.xlsx",sheet_name='Sheet_name_1', index=False)

上面的方法应该可行,但我不太确定您想如何为相同的 ID 保存重复的记录。您希望将它们存储为 DRIVE_0DRIVE_1DRIVE_2 吗?

编辑:

df 可以用不同的方式导出。将下面的 #export to Excel 替换为以下内容:

df.to_excel("output.xlsx",sheet_name='Sheet_name_1')

编辑 2:

没有输入数据,很难看到任何流。用假数据更正了上面的代码

关于python - 如何将多行 excel 数据连接成一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55359200/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com