Python 3.x 将列中的多个值拆分为单独的列

Python 3.x 将列中的多个值拆分为单独的列,python-3.x,pandas,Python 3.x,Pandas,我有一个带有列的dataframe,其中包含两个不同的列值及其名称,如下所示: 如何将其转换为单独的列 到目前为止,我尝试了以下几点: 使用df[col].apply(pd.Series)-因为列中的数据不是字典格式,所以它不起作用 尝试用分号(“;”)分隔列,但这不是一个好主意,因为根据响应,给定的数据帧可能有n个列 编辑: 纯文本格式的数据: d = {'ClusterName': ['Date:20191010;Bucket:All','Date:20191010;Bucket:som

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

如何将其转换为单独的列

到目前为止,我尝试了以下几点:

  • 使用
    df[col].apply(pd.Series)
    -因为列中的数据不是字典格式,所以它不起作用
  • 尝试用分号(
    “;”
    )分隔列,但这不是一个好主意,因为根据响应,给定的数据帧可能有n个列 编辑: 纯文本格式的数据:

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

    所以。。也许像这样

    设置数据框

    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'])
    
    那么:

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

    编辑:

    没有硬编码的变量名,这里有一个快速的黑客。您可以对其进行清理(并生成不那么愚蠢的变量名):


    你能把数据以文本的形式发布以便使用吗?因此,我们最好使用
    pd.from_clipboard()
    重新创建数据帧。您是否尝试过在数据透视表后面加上类似
    melt
    的内容?它按预期工作。关于我的观点#2。有没有办法对n个列自动执行此操作?响应携带压缩在单个列“ClusterName”中的变量列。我猜,数一数“ClusterName”中打包的属性数,然后使用您的方法将它们解包。拆分(“:”)[0]将生成列名,[1]将生成值。这同样有效,但正如我所说的,由于动态服务器响应,我希望自动执行此操作。我不需要硬编码任何列名,而是依靠拆分和定义
    上再次拆分以提取列名。。。
    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