#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]