我有一本看起来像这样的字典:
{'4F703:00013:02038': {'100.000, Oryza rufipogon x Oryza sativa', '100.000,
Oryza rufipogon', '100.000, Oryza sativa', '100.000,
Oryza sativa Japonica Group', '100.000, Oryza sativa f. spontanea'}}
我想将此字典写入xlsx文件,所以我执行了以下代码:
workbook=xlsxwriter.Workbook('demo.xlsx')
worksheet=workbook.add_worksheet()
row=0
col=0
for key in new_dict.keys():
row += 1
worksheet.write(row,col, key)
for item in new_dict[key]:
print(item,row,col+1)
worksheet.write(row,col + 1,item)
col += 1
col = 0
workbook.close()
但是我得到以下输出:
我想这样:
我在做什么错?
答案 0 :(得分:2)
使用pandas.ExcelWriter
可以大大简化此任务:
import pandas as pd
data = {'4F703:00013:02038': {'100.000, Oryza sativa', '100.000, Oryza rufipogon x Oryza sativa', '100.000, Oryza rufipogon', '100.000, Oryza sativa f. spontanea', '100.000, Oryza sativa Japonica Group'}}
new_data = [[a, [i.split(', ') for i in b]] for a, b in data.items()]
with pd.ExcelWriter('spreadsheet.xlsx') as writer:
df = pd.DataFrame([i for a, [c, *d] in new_data for i in [[a, *c], *[['', *k] for k in d]]])
df.to_excel(writer, sheet_name='sheet1', startrow=0, index=False)
writer.save()
答案 1 :(得分:1)
item
是一个包含数字和以逗号分隔的文本的字符串。该字符串将添加到工作表的列中。
为了将数字和文本分开,需要另外一列。
您可以执行item.split(',')
并将第一部分放在第二栏中,第二部分放在第三栏中。
num, text = item.split(',')
worksheet.write(row,col + 1, num)
worksheet.write(row,col + 2, text)
答案 2 :(得分:1)
import re
pattern = r'\b[A-Za-z ]*[A-Za-z]\b'
rows_string = 'Equity & 1,638 & \\$3,227,305 & \\$2,649,208 & \\$3,270,402 & \\$3,114,298 & \\$3,173,369 & \\$2,978,769 & \\$3,016,161 & \\$2,807,840\\\\\nFixed Income & 420 & \\$765,856 & \\$661,395 & \\$824,603 & \\$792,579 & \\$794,224 & \\$783,793 & \\$719,307 & \\$630,298\\\\\nCommodities & 119 & \\$72,911 & \\$66,302 & \\$81,649 & \\$81,633 & \\$79,296 & \\$76,450 & \\$64,136 & \\$63,667\\\\\nAsset Allocation & 63 & \\$10,190 & \\$9,275 & \\$10,684 & \\$10,089 & \\$10,371 & \\$9,829 & \\$9,619 & \\$8,880\\\\\nAlternatives & 55 & \\$5,601 & \\$6,023 & \\$6,715 & \\$6,279 & \\$6,365 & \\$6,645 & \\$6,757 & \\$6,243\\\\\nCurrency & 34 & \\$311 & \\$2,014 & \\$1,665 & \\$1,743 & \\$1,683 & \\$1,666 & \\$1,722 & \\$2,058\\\\\nTOTALS & 2,329 & \\$4,082,173 & \\$3,394,217 & \\$4,195,718 & \\$4,006,620 & \\$4,065,308 & \\$3,857,151 & \\$3,817,700 & \\$3,518,986\\\\'
rows = re.findall(pattern, rows_string)
print(rows)
rows_string2 = 'Starting Portfolio & sell & 21.39\\% & -0.91\\% & 1.52\\% & 9.29\\% & 9.72\\% & 14.89\\% & 38.21\\% & 55.4\\% & & 90.86\\%\\\\'
rows2 = re.findall(pattern, rows_string2)
print(rows2)
我认为您正在考虑将'100.000,Oryza rufipogon x Oryza sativa'作为多个值,但将其作为单个值,并将其填充在单个列中。上述解决方案可能会清除一些问题。>
答案 3 :(得分:0)
您的代码没有错。
请注意,“ 100.000,Oryza rufipogon x Oryza sativa”是一个值。 如果要在excel中作为单独的列。获取字符串并将其除以,然后将其写入工作表。