Создание фрейма данных Pandas из списка

#python #pandas

#python #pandas

Вопрос:

Я получаю следующую ошибку Shape of passed values is (1, 5), indices imply (5, 5) . Из того, что я могу сказать, это говорит о том, что набор данных не соответствует количеству столбцов, и, конечно, это, очевидно, правильно. Первоначально я думал, что это может быть связано с использованием списка, но я получаю ту же проблему при передаче в массив numpy.

Может ли кто-нибудь указать на мою глупость, так как я явно делаю что-то неправильно.

 data = ['data1', 'data2', 'data3', 'data4', 'data5']
report_name = 'test.csv'
try:
    df = pd.DataFrame(data, columns=['column1', 'column2', 'column3', 'column4', 'column5'], index=None)
    df.sort_values('column1', ascending=True, inplace=True)
    df.to_csv(report_name, index=False)
except Exception, e:
    print e
  

Ответ №1:

вы должны передать 2d-размерный массив pd.DataFrame для данных, если вы принудительно вводите форму, передавая columns

 data = [['data1', 'data2', 'data3', 'data4', 'data5']]
df = pd.DataFrame(data, columns=['column1', 'column2', 'column3', 'column4', 'column5'])
  

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

1. хм, я попытался сделать то, что, как я думал, было этим, используя массив numpy. Думаю, я тоже неправильно понял массивы numpy:(. Приятно и просто, когда вы знаете, как :). спасибо, что указали на это

2. @iNoob, это просто деталь, потому что вы пытаетесь создать фрейм данных с 1 строкой, что не очень полезно. На практике вы всегда передаете список list или 2d np-массив, поэтому вам не нужно беспокоиться об этом

Ответ №2:

Вы пропустили скобки списка вокруг data

 df = pd.DataFrame(data = [data], columns=['column1', 'column2', 'column3', 'column4', 'column5'], index=None)
  

Что следует отметить:
pd.DataFrame() ожидает список кортежей, это означает:

 data = ['data1', 'data2', 'data3', 'data4', 'data5']
df = pd.DataFrame(data)
# This implies every element in the list `data` is a tuple 
print(df)

Out[]:        0
         0  data1
         1  data2
         2  data3
         3  data4
         4  data5
  

В отличие от :

 data = ['data1', 'data2', 'data3', 'data4', 'data5']
df = pd.DataFrame([data])
# This implies that the list `data` is the first tuple
print(df)
Out[]:        0      1      2      3      4
         0  data1  data2  data3  data4  data5