Объединить 2 строки в 1 строку и установить его в «столбцы» - PullRequest
2 голосов
/ 15 марта 2019

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

column 1        column 2 but          column 3
                with more text
1.5893001       1.513451              1.198420
1.5893001       1.513451              1.198420
1.5893001       1.513451              1.198420
1.5893001       1.513451              1.198420
etc...

Я хочу, чтобы столбцы в DataFrame имели текст, который имеет этот заголовок. Меня уже раздражает тот факт, что я должен предварительно обработать данные, вручную преобразовав их в dict.

После загрузки этих данных в DataFrame первая строка DataFrame - это метки столбцов, где column2, конечно, читается только частично. Во второй строке первое значение (столбца 1) имеет значение «», второе - «с большим количеством текста», а третье - NaN.

Я пробовал df.columns = df.iloc[0] + ' ' + df.iloc[1], что приводит к тому, что во втором столбце указана правильная метка, а в остальных - nan.

Есть ли способ сделать условное выражение?

[править] @jezrael для правильного форматирования

{0: {0: 'column 1', 1: '', 2: 1.5893001, 3: 1.5893001}
 1: {0: 'column 2', 1: 'with more text', 2: 1.513451, 3: 1.513451}
 2: {0: 'column 3', 1: None, 2: 1.198420, 3: 1.198420}}

1 Ответ

1 голос
/ 15 марта 2019

Вы можете заменить ошибочные значения на Series.fillna и удалить пробельные значения на str.strip, а затем удалить первые 2 строки с помощью iloc:

df.columns = (df.iloc[0] + ' ' + df.iloc[1].fillna('')).str.strip()
df = df.iloc[2:].reset_index(drop=True)
print (df)
  column 1 column 2 with more text column 3
0   1.5893                 1.51345  1.19842
1   1.5893                 1.51345  1.19842
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...