#python #excel #csv
#python #excel #csv
Вопрос:
У меня есть следующие списки, каждый из которых будет формировать строку в csv / Excel:
row1 = ['E411', 'name1', ['issue1', 'issue2', 'issue3']]
row2 = ['E473', 'name2', ['issue1', 'issue2']
Я хочу иметь файл csv или Excel с тремя столбцами с заголовками столбцов [‘Title’, ‘Name’, ‘Issues’], где первый элемент строки 1 — это заголовок, второй элемент строки 1 — это имя, а третий элемент (без кавычек и запятых, возможно, с разрывом строки внутри ячейки) — это проблемы.
Следующее, что я попробовал, дает только первый элемент из третьего элемента списка.
headers = ['Title','Name','Issues'
a = pd.DataFrame(row1, columns=headers)
a.to_csv('issues.csv', model='a', header=False)
Комментарии:
1. Что вы уже пробовали?
Ответ №1:
Это должно выполнить задание:
row1 = ['E411', 'name1', ['issue1', 'issue2', 'issue3']]
row2 = ['E473', 'name2', ['issue1', 'issue2']]
allrows = [row1, row2]
for n in range(len(allrows)):
allrows[n][-1] = 'n'.join(allrows[n][-1])
import pandas as pd
pd.DataFrame(allrows).to_csv('outcsvfilename.csv', index=False, header=['Title','Name','Issues'])
Ответ №2:
Судя по тому, как это выглядит в вашем вопросе, вам не хватает ]
в конце вашей row2
строки. Вы всегда можете сделать что-то похожее на приведенный ниже код.
import csv
#The list to write
row1 = [['TestData', 'TestData2', 'TestData3'], ['Random', 'Random2', 'Random3']]
output = open('output.csv', 'a ', newline='')
with output:
write = csv.writer(output)
write.writerows(row1)
Ответ №3:
Используя pandas
:
import pandas as pd
row1 = ['E411', 'name1', ['issue1', 'issue2', 'issue3']]
row2 = ['E473', 'name2', ['issue1', 'issue2']]
data = {'Title': ['E411','E473'],
'Name': ['name1','name2'],
'Issues': [",".join(['issue1', 'issue2', 'issue3']), ",".join(['issue1', 'issue2'])]
}
df = pd.DataFrame(data, columns = ['Title', 'Name', 'Issues'])
print(df)
# df.to_csv('filename.csv', index=False) # save as .csv
ВЫВОД:
Title Name Issues
0 E411 name1 issue1,issue2,issue3
1 E473 name2 issue1,issue2
Ответ №4:
Вы хотите разделить столбец проблемы на несколько записей, тогда вы можете использовать это :
import pandas as pd
import numpy as np
row1 = ['E411', 'name1', ['issue1', 'issue2', 'issue3']]
row2 = ['E473', 'name2', ['issue1', 'issue2']]
df = pd.DataFrame([row1, row2], columns=['Title', 'Name', 'Issues'])
lens = [len(item) for item in df['Issues']]
df1 = pd.DataFrame( {"Title" : np.repeat(df['Title'].values,lens),
"Name" : np.repeat(df['Name'].values,lens),
"Issues" : np.concatenate(df['Issues'].values)})
df1.to_csv('file_name.csv', index=False)
'''
Title Name Issues
0 E411 name1 issue1
1 E411 name1 issue2
2 E411 name1 issue3
3 E473 name2 issue1
4 E473 name2 issue2
'''