将Pandas列内的多个值拆分为单独的列

时间:2019-10-11 16:23:30

标签: python-3.x pandas

我有一个带有列的数据框,其中包含两个不同的列值及其名称,如下所示:

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 个答案:

答案 0 :(得分:1)

怎么样:

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

答案 1 :(得分:0)

所以..也许是这样...

设置数据框

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'])