Используйте слова первой строки перед двоеточием для создания заголовков столбцов и удаления из строки для 1-й и всех оставшихся строк

#python #pandas #split #row #multiple-columns

#python #pandas #разделить #строка #несколько столбцов

Вопрос:

У меня есть CSV-файл, который я считываю во фрейм данных, а затем хотел бы взять первую строку и использовать каждое слово перед двоеточием в качестве заголовка столбца, а остальные строки отделить словом перед двоеточием.

Заранее благодарю вас.

Я пытался re.sub, я пытался разделить и соединить строки, но безуспешно.

Ниже приведен пример ввода, а затем требуемого вывода:

 Input
Date: 2019/03/20    ID: DD0011010   REF: 15987-AA
Date: 2019/03/21    ID: DD0011011   REF: 15987-AA
Date: 2019/03/22    ID: DD0011012   REF: 15687-AA
Date: 2019/03/23    ID: DD0011013   REF: 65987-AA
Date: 2019/03/24    ID: DD0011014   REF: 15990-AB

Expected Output
Date            ID              REF
2019/03/20      DD0011010       15987-AA
2019/03/21      DD0011011       15987-AA
2019/03/22      DD0011012       15687-AA
2019/03/23      DD0011013       65987-AA
2019/03/24      DD0011014       15990-AB
  

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

1. имеет ли пространство между каждым столбцом фиксированную ширину?

Ответ №1:

По-видимому, вам просто нужно некоторое регулярное выражение и replace

 df.replace('[a-zA-Z0-9]*:s ', '', regex=True)
  

Выводит

     col1        col2        col3
0   2019/03/20  DD0011010   15987-AA
1   2019/03/21  DD0011011   15987-AA
2   2019/03/22  DD0011012   15687-AA
3   2019/03/23  DD0011013   65987-AA
4   2019/03/24  DD0011014   15990-AB
  

Ответ №2:

Попробуйте это:

df.applymap(lambda x: re.split(":", str(x))[1])

Ответ №3:

для этого вы можете использовать простой разделитель строк

 def sep(t_string):
   return t_string.split(" ")
  

если t_string = 'Date: 2019/03/20'

 sep(t_string)[0] = 'Date:'
  

и

 sep(t_string)[1] == '2019/03/20'
  

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

 d_table['column'] = [sep(t)[1] for t in d_table['column'].values]