<p>就我个人而言,我会选择<code>pandas</code>。在</p>
<pre><code>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)
</code></pre>
<p>上面的方法应该行得通,但是我不太确定您希望如何保存相同id的重复记录。您是否希望将它们存储为<code>DRIVE_0</code>、<code>DRIVE_1</code>、<code>DRIVE_2</code>?在</p>
<h3>编辑:</h3>
<p>df可以用不同的方式导出。将下面的<code>#export to Excel</code>替换为以下内容:</p>
^{pr2}$
<h2>编辑2:</h2>
<p>由于没有输入数据,很难看到任何数据流。用假数据更正了上面的代码</p>