Объединение списка заголовков в Dataframe в пандах - PullRequest
0 голосов
/ 29 апреля 2018

У меня проблемы с объединением 2 простых DataFrames. Я загружаю первый файл .txt, содержащий набор данных, а затем еще один файл, содержащий header предыдущего набора данных.

Сначала я загружаю 2 кадра данных:

df = pd.read_csv(file_dir + file_name, sep = ',', header = None, encoding = 'latin-1', low_memory = False)
df_column_names = pd.read_csv(file_dir + file_name_cols, sep = ',', header = None, encoding = 'latin-1', low_memory = False)

После этого я создаю list заголовка DataFrame, сначала перенеся таблицу и преобразовав ее в list:

list_names = df_column_names.T.values.tolist()

Затем я наконец создаю желаемое DataFrame:

df.columns = list_names

Но я получаю следующее сообщение об ошибке:

ValueError: Несоответствие длины: ожидаемая ось имеет 26 элементов, новые значения есть 1 элемент

Размеры моих объектов: df размера (204,26) и типа DataFrame, df_column_names размера (1,26) и типа DataFrame, list_names размера 26 и типа list.

После прочтения других тем наиболее похожими были здесь и здесь . Тем не менее, после проверки индексов двух моих DataFrames оба выглядят нормально:

In [4]: print(df.index)
RangeIndex(start=0, stop=205, step=1)

In [5]: print(df_column_names.index)
RangeIndex(start=0, stop=1, step=1)

In [6]: len(list_names)
Out[6]: 26

Внешний вид list_names выглядит следующим образом:

In [7]: list_names
Out[7]: 
[['symboling'],
 ['normalized-losses'],
 ['make'],
 ['fuel-type'],
 ['aspiration'],
 ['num-of-doors'],
 ['body-style'],
 ['drive-wheels'],
 ['engine-location'],
 ['wheel-base'],
 ['length'],
 ['width'],
 ['height'],
 ['curb-weight'],
 ['engine-type'],
 ['num-of-cylinders'],
 ['engine-size'],
 ['fuel-system'],
 ['bore'],
 ['stroke'],
 ['compression-ratio'],
 ['horsepower'],
 ['peak-rpm'],
 ['city-mpg'],
 ['highway-mpg'],
 ['price']]

Заранее спасибо за помощь и советы.

1 Ответ

0 голосов
/ 29 апреля 2018

Ваш list_names представляет собой список списков . Требуется плоский список.

Вам необходимо изменить эту строку:

list_names = df_column_names.T.values.tolist()

К этому:

df_column_names = df_column_names.transpose() # transpose dataframe if necessary
list_names = df_column_names[0].tolist()

Вам необходимо транспонировать ваш фрейм данных, как указано выше, если имена столбцов находятся в первом ряду, а не в первом столбце.

...