Преобразование списка строк в панды DataFrame на основе значений в строке - PullRequest
0 голосов
/ 24 мая 2018

У меня есть список строк, подобный следующему:

input = ["number__128_alg__hello_min_n__7_max_n__9_full_seq__True_random_color__False_shuffle_shapes__False.pkl", "k__9_window__10_number__128_overlap__True_alg__hi_min_n__7_max_n__9_full_seq_embedding__False_random_color__False_shuffle_shapes__False.pkl", "k__9_window__10_number__128_overlap__True_alg__what_random_color__False_shuffle_shapes__False.pkl"]

Формат этих строк - имя параметра, за которым следует «__», затем значение параметра.После значения параметра перед следующим именем параметра стоит _.Стоит отметить, что некоторые имена параметров содержат в себе _ (например, «random_shape». Каждая строка имеет разные параметры, но они перекрываются. Поэтому я хотел бы создать фрейм данных с каждым именем параметра в виде столбца, и каждыйстрока, представляющая собой значения, соответствующие каждому элементу списка * 1004. * Если конкретное значение в списке не имеет параметра, фрейм данных должен содержать NA или NaN или что-либо еще.

Как это можно сделать?

Спасибо!

РЕДАКТИРОВАТЬ: Если это не может быть сделано для исходного списка, как насчет:

input = ["number__128_alg__hello_min.n__7_max.n__9_full.seq__True_random.color__False_shuffle.shapes__False.pkl", "k__9_window__10_number__128_overlap__True_alg__hi_min.n__7_max.n__9_full.seq__False_random.color__False_shuffle.shapes__False.pkl", "k__9_window__10_number__128_overlap__True_alg__what_random.color__False_shuffle.shapes__False.pkl"]

1 Ответ

0 голосов
/ 24 мая 2018

Это возможно, если вы предполагаете, что значения не могут содержать символ _ (также предполагается, что вы хотите отбросить .pkl в конце).

input = [
    "number__128_alg__hello_min_n__7_max_n__9_full_seq_embedding__True_random_color__False_shuffle_shapes__False.pkl", 
    "k__9_window__10_number__128_overlap__True_alg__hi_min_n__7_max_n__9_full_seq_embedding__False_random_color__False_shuffle_shapes__False.pkl", 
    "k__9_window__10_number__128_overlap__True_alg__what_random_color__False_shuffle_shapes__False.pkl"
]

Простое регулярное выражение должно делатьхитрость:

import re
data = [dict(re.findall(r"([^_].*?)__([^_]+)", _[:-4])) for _ in input]
print(data)

Результат:

[{'number': '128',
  'alg': 'hello',
  'min_n': '7',
  'max_n': '9',
  'full_seq_embedding': 'True',
  'random_color': 'False',
  'shuffle_shapes': 'False'},
 {'k': '9',
  'window': '10',
  'number': '128',
  'overlap': 'True',
  'alg': 'hi',
  'min_n': '7',
  'max_n': '9',
  'full_seq_embedding': 'False',
  'random_color': 'False',
  'shuffle_shapes': 'False'},
 {'k': '9',
  'window': '10',
  'number': '128',
  'overlap': 'True',
  'alg': 'what',
  'random_color': 'False',
  'shuffle_shapes': 'False'}]    

В качестве кадра данных:

import pandas as pd
pd.DataFrame(data)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...