Как разделить все столбцы в большом фрейме данных pandas? - PullRequest
0 голосов
/ 04 апреля 2020

У меня очень большой фрейм данных, который я хочу разделить ВСЕ столбцы, кроме первых двух, на основе разделителя запятых. Поэтому мне нужно логически ссылаться на имена столбцов в al oop или каким-либо другим способом, чтобы разделить все столбцы в одном sw oop.

В моем тестировании метода split: я смог явно указать (то есть HARD CODE) имя одного столбца (rs145629793) в качестве одного из обязательных параметров, и результатом было 2 новых столбца, как я хотел.

См. python код ниже

HARDCODED COLUMN NAME -

df [['rs1', 'rs2']] = df.rs145629793.str.split (",", expand = True)

Проблема: это не можно сослаться на фактические имена столбцов и повторить код.

Затем я заменил фактическое имя столбца rs145629793 на столбцы [2] в списке параметров метода разделения.

Это приводит к ОШИБКЕ ' str имеет атрибут ni str '

Ответы [ 2 ]

0 голосов
/ 04 апреля 2020

Вы можете индексировать столбцы по позиции, а не по имени, используя iloc. Например, чтобы получить третий столбец:

df.iloc[:, 2]

Таким образом, вы можете легко l oop по нужным столбцам.

0 голосов
/ 04 апреля 2020

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

import pandas as pd
your_dataframe=pd.DataFrame({'a':['1,2,3', '9,8,7'],
               'b':['4,5,6', '6,5,4'],
               'c':['7,8,9', '3,2,1']})
import copy

def split_cols(df):
    dict_of_df = {}
    cols=df.columns.to_list()
    for col in cols:
        key_name = 'df'+str(col)
        dict_of_df[key_name] = copy.deepcopy(df)
        var=df[col].str.split(',', expand=True).add_prefix(col)
        df=pd.merge(df, var, how='left', left_index=True, right_index=True).drop(col, axis=1)
    return df


split_cols(your_dataframe)

По сути, в этом решении вы создаете список столбцы, которые вы хотите l oop через. Затем вы проведете oop через этот список и создадите новые кадры данных для каждого столбца, в котором вы запускаете функцию split(). Затем вы объединяете все вместе в индекс. Я также:

  1. включил префикс имени столбца, поэтому имена столбцов не имели повторяющихся имен и могли быть более легко идентифицируемыми
  2. отбросил старый столбец, который мы делили
  3. Просто import copy и используйте созданную мной функцию split_cols() и передайте имя вашего фрейма данных.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...