Ошибка значения: все массивы должны быть одинаковой длины — распечатать фрейм данных в CSV

#python #windows #pandas #csv #dataframe

#python #Windows #pandas #csv #фрейм данных

Вопрос:

спасибо, что заглянули! Я надеялся получить некоторую помощь в создании csv с использованием фрейма данных pandas. Вот мой код:

 a = ldamallet[bow_corpus_new[:21]]
b = data_text_new

print(a)
print("/n")
print(b)

d = {'Preprocessed Document': b['Preprocessed Document'].tolist(), 
     'topic_0': a[0][1], 
     'topic_1': a[1][1], 
     'topic_2': a[2][1], 
     'topic_3': a[3][1], 
     'topic_4': a[4][1], 
     'topic_5': a[5][1], 
     'topic_6': a[6][1], 
     'topic_7': a[7][1], 
     'topic_8': a[8][1], 
     'topic_9': a[9][1], 
     'topic_10': a[10][1],
     'topic_11': a[11][1], 
     'topic_12': a[12][1],
     'topic_13': a[13][1],
     'topic_14': a[14][1],
     'topic_15': a[15][1],
     'topic_16': a[16][1],
     'topic_17': a[17][1],
     'topic_18': a[18][1],
     'topic_19': a[19][1]}

print(d)

df = pd.DataFrame(data=d)
df.to_csv("test.csv", index=False)  

Данные:

печать(a): формат в кортежах

[[(номер темы: 0, процент темы),…(19, #)], [( распределение темы для следующей строки, #)…(19, .819438),…(#,#),…]

печать(a)

печать(b)

печать(b)

Вот моя ошибка: ошибка

Это размер фрейма данных:

Размер b

форма

форма

Я хотел, чтобы это выглядело так: мечта

Любая помощь была бы с благодарностью принята 🙂

Комментарии:

1. Я думаю, что это будет только одна строка фрейма данных, но вы b — это весь список. Попробуйте изменить на 'Preprocessed Document': 'someword1' .

2. Проблема в том, что a — это список списка кортежей

3. @MattCremeens Спасибо, что обратились, это много значит, в data_new есть столбец под названием «Предварительно обработанные документы», который содержит 1 048 575 строк комментариев. Я хотел бы передать каждую строку в функцию ldamallet для определения темы, чтобы количество строк соответствовало. Я изо всех сил пытаюсь понять, как выполнить итерацию по всему столбцу, чтобы я мог узнать, к каким темам относится каждая строка.

4. @Chris да, a — это список кортежей — функция ldamallet выводит данные в этом формате, по замыслу она взята из библиотеки, поэтому у меня нет отступлений по поводу изменения формата функции. Хотел бы я это сделать

Ответ №1:

Возможно, проще всего получить второе значение каждого кортежа для всех строк в его собственном списке. Что — то вроде этого

 topic_0=[]
topic_1=[]
topic_2=[]
...and so on
for i in a:
    topic_0.append(i[0][1])
    topic_1.append(i[1][1])
    topic_2.append(i[2][1])
    ...and so on
  

Тогда вы можете создать свой словарь следующим образом

 d = {'Preprocessed Document': b['Preprocessed Document'].tolist(), 
     'topic_0': topic_0, 
     'topic_1': topic_1, 
      etc. }
  

Ответ №2:

Я воспользовался советом @mattcremeens, и это сработало. Я опубликовал полный код ниже. Он был прав насчет удаления кортежей, мой предыдущий код не перебирал строки, а печатал только первую строку.

 topic_0=[]
topic_1=[]
topic_2=[]
topic_3=[]
topic_4=[]
topic_5=[]
topic_6=[]
topic_7=[]
topic_8=[]
topic_9=[]
topic_10=[]
topic_11=[]
topic_12=[]
topic_13=[]
topic_14=[]
topic_15=[]
topic_16=[]
topic_17=[]
topic_18=[]
topic_19=[]


for i in a:
    topic_0.append(i[0][1])
    topic_1.append(i[1][1])
    topic_2.append(i[2][1])
    topic_3.append(i[3][1])
    topic_4.append(i[4][1])
    topic_5.append(i[5][1])
    topic_6.append(i[6][1])
    topic_7.append(i[7][1])
    topic_8.append(i[8][1])
    topic_9.append(i[9][1])
    topic_10.append(i[10][1])
    topic_11.append(i[11][1])
    topic_12.append(i[12][1])
    topic_13.append(i[13][1])
    topic_14.append(i[14][1])
    topic_15.append(i[15][1])
    topic_16.append(i[16][1])
    topic_17.append(i[17][1])
    topic_18.append(i[18][1])
    topic_19.append(i[19][1])
    
d = {'Preprocessed Document': b['Preprocessed Document'].tolist(),
     'topic_0': topic_0,
     'topic_1': topic_1,
     'topic_2': topic_2,
     'topic_3': topic_3,
     'topic_4': topic_4,
     'topic_5': topic_5,
     'topic_6': topic_6,
     'topic_7': topic_7,
     'topic_8': topic_8,
     'topic_9': topic_9,
     'topic_10': topic_10,
     'topic_11': topic_11,
     'topic_12': topic_12,
     'topic_13': topic_13,
     'topic_14': topic_14,
     'topic_15': topic_15,
     'topic_16': topic_16,
     'topic_17': topic_17,
     'topic_18': topic_18,
     'topic_19': topic_19}

df = pd.DataFrame(data=d)
df.to_csv("test.csv", index=False, mode = 'a')