Разделение данных в pandas с переменным форматом - PullRequest
0 голосов
/ 04 февраля 2020

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

1) Разбить данные на два столбца времени и данные для узла. Затем добавьте метку узла в качестве первого столбца.

2) Позже есть еще один параметр для узла, а не непосредственно под тем, где информация будет в форме Data 2 Node (XX, XX), которая является такой же как один предыдущий.

Это даст мне 4 столбца в конце, первый из которых будет идентификатором узла, второй - временем, третий - параметром данных 1, а четвертый - параметром согласованных данных 2.

Я включил небольшую выборку данных ниже, но на выходе получается более 1 000 000 строк, поэтому было бы неплохо использовать pandas или другую python функциональность для манипулирования данными.

Спасибо за помощь!

Name  20 vs   2
----------------------------------

   time                    Data 1 Node(  72,  23)

     ---------------------      ---------------------
          4.1203924E-003            -3.6406431E-005
          1.4085015E-002            -5.8257871E-004
          2.4049638E-002             6.8743013E-004
          3.4014260E-002             8.2296302E-005
          4.3978883E-002            -1.2276627E-004
          5.3943505E-002             1.9813024E-004
....
Name  20 vs   2
----------------------------------
  time                      Data 1 Node(  72,  24)

     ---------------------      ---------------------
          4.1203924E-003            -3.6406431E-005
          1.4085015E-002            -5.8257871E-004
          2.4049638E-002             6.8743013E-004
          3.4014260E-002             8.2296302E-005
          4.3978883E-002            -1.2276627E-004
          5.3943505E-002             1.9813024E-004

1 Ответ

0 голосов
/ 08 февраля 2020

Так что после большого количества поиска в Google мне удалось собрать это воедино. Данные, которые я просматривал, были разделены пробелами, поэтому я использовал метод чтения с фиксированной шириной файла в pandas, после чего я просмотрел индексы нескольких известных элементов в списке и использовал их, чтобы разбить данные на два кадра данных, которые Я мог бы слить и обработать после. Я удалил строки и значения NaN, так как они не были мне интересны. После этого началось забавное фактическое использование данных.

    import pandas
    widths = [28, 27 ]
    df = pd.read_fwf(filename, widths=widths, names=["Times", "Items"])
    data = df["Items"].astype(str)
    index1 = data.str.contains('Data 1').idxmax()
    index2 = data.str.contains('Data 2').idxmax()

    df2 = pd.read_fwf(filename, widths=widths, skiprows=index1, skipfooter = (len(df)-index2), header = None, names=["Times", "Prin. Stress 1"])
    df2 = pd.read_fwf(filename, widths=widths, skiprows=index2, header = None, names=["Times", "Prin. Stress 2"])

    df2["Prin. Stress 2"] = df3["Prin. Stress 2"]
    df2 = df2[~df2["Times"].str.contains("---")] # removes lines ----
    df2.dropna(inplace = True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...