скопировать имя столбца фрейма данных в новую строку

#python-3.x #pandas #dataframe

#python-3.x #pandas #фрейм данных

Вопрос:

Я читаю файл и конвертирую в фрейм данных. Поскольку файл не организован, я сохранил заголовок как 0 при чтении в формате csv. По умолчанию, если заголовок = 0, pandas автоматически назначает первую строку df

    "Name"=>"Mark"  "Phone"=>"1234567"  "Id"=>"E1234"    "Admin"=>false
0  "Name"=>"Anto"  "Phone"=>"7654321"   "Dept"=>"HR"   "Id"=>"E4321"   "case"=>nil
  

Моя конечная цель — преобразовать фрейм данных в читаемый формат как

 Name   Phone    Id   Dept   Admin  case 
Mark   1234567  E1234        false
Anto   7654321  E4321   HR           nil
  

Поскольку первая строка уже перемещена в столбец, я не могу выполнить манипуляции с первой строкой. Возможно ли скопировать имя столбца и вставить его в качестве первой строки того же фрейма данных?

ПРИМЕЧАНИЕ: Поскольку файл не организован, данные отличаются в каждой строке. Из-за этого я избегал использования header = NONE.

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

1. Как выглядит исходный файл, первые 2 строки?

2. да, если мы посмотрим внимательно, вторая строка имеет индекс только 0. В нем две строки.. После преобразования в фрейм данных отображается только одна строка

Ответ №1:

Одна из идей — создать список словарей и передать в DataFrame конструктор:

 out = []
with open("Sample.csv") as f:
    for line in f:
        d = dict([[y.strip('"') for y in x.split('=>')] for x in line.strip().split(',')])
        out.append(d)

df = pd.DataFrame(out)
print (df)
   Name    Phone     Id  Admin Dept case
0  Mark  1234567  E1234  false  NaN  NaN
1  Anto  7654321  E4321    NaN   HR  nil
  

Файл:

 "Name"=>"Mark","Phone"=>"1234567","Id"=>"E1234","Admin"=>false
"Name"=>"Anto","Phone"=>"7654321","Dept"=>"HR","Id"=>"E4321","case"=>nil
  

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

1. Извините, я неправильно понял ваш вопрос. Исходный файл находится в сжатом формате, я получаю сообщение об ошибке типа ‘utf-8’ кодек не может декодировать байт 0x8b в позиции 1: недопустимый начальный байт. Я преобразовал файл в формат csv и последовал вашей идее, и я получаю ошибку типа: ожидаемый str, байты или os. Объект, подобный пути, а не фрейм данных

2. @JackJack — Хм, так есть проблема с чтением файла utf-8 ?

3. Да, я попытался извлечь файл в формате CSV и передал этот файл по вашей идее. Я получаю «ошибку типа: ожидаемый str, байты или ос. Объект, подобный пути, а не фрейм данных»