Разделение нескольких значений внутри столбца панд на отдельные столбцы - PullRequest
1 голос
/ 11 октября 2019

У меня есть кадр данных со столбцом, который содержит два разных значения столбца и их имя следующим образом:

Sample Dataframe

Как преобразовать его в отдельные столбцы?

Expected Dataframe

До сих пор я пытался выполнить следующее:

  1. использовать df[col].apply(pd.Series) - с момента данных данные не работалив столбце не в формате словаря.
  2. Пробное разделение столбцов знаком точки с запятой (";"), но это не очень хорошая идея, поскольку в данном кадре данных может быть n номеров столбцов в зависимости от ответа.

РЕДАКТИРОВАТЬ: Данные в текстовом формате:

d = {'ClusterName': ['Date:20191010;Bucket:All','Date:20191010;Bucket:some','Date:20191010;Bucket:All']}

Ответы [ 2 ]

1 голос
/ 11 октября 2019

Как насчет:

df2 = (df["ClusterName"]
       .str.replace("Date:", "")
       .str.replace("Bucket:", "")
       .str.split(";", expand=True))
df2.columns = ["Date", "Bucket"]

РЕДАКТИРОВАТЬ:

Без жесткого кодирования имен переменных, вот быстрый взлом. Вы можете очистить его (и сделать менее глупые имена переменных):

df_temp = df.ClusterName.str.split(";", expand=True)
cols = []
for col in df_temp:
    df_temptemp = df_temp[col].str.split(":", expand=True)
    df_temp[col] = df_temptemp[1]
    cols.append(df_temptemp.iloc[0, 0])
df_temp.columns = cols
0 голосов
/ 11 октября 2019

Так что ... может быть, вот так ...

Настройка фрейма данных

d = {'ClusterName': ['Date:20191010;Bucket:All','Date:20191010;Bucket:some','Date:20191010;Bucket:All']}
df = pd.DataFrame(data=d)
df

Разобрать фрейм данных, разделяя их на двоеточие и точку с запятой

ls = []
for index, row in df.iterrows():
    splits = row['ClusterName'].split(';')

    print(splits[0].split(':')[1],splits[1].split(':')[1])

    ls.append([splits[0].split(':')[1],splits[1].split(':')[1]])


df = pd.DataFrame(ls, columns =['Date', 'Bucket'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...