записать список в формат CSV / Excel на python

#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
'''