【问题标题】:Pandas : separate values in one column to several rowsPandas:将一列中的值分隔为多行
【发布时间】:2019-10-12 06:28:01
【问题描述】:

如果一列包含多个值,以, 分隔,如何将它们分隔在不同的行中?

样本数据集:

name   age      taskID
----------------------------
AA      20      T01,T02
BB      22      T03,T02,T03
CC      24      T01,T05
DD      21      T02,T06 

输出:

name   age      taskID
-----------------------
AA      20      T01
AA      20      T02
BB      22      T03
BB      22      T02
CC      24      T01
CC      24      T05
CC      24      T03
DD      21      T02 
DD      21      T06

【问题讨论】:

    标签: python database pandas csv dataframe


    【解决方案1】:

    对于 pandas 0.25 及以上版本,您可以使用

    df = pd.DataFrame([['AA', '20', 'T01,T02'], ['BB', '22', 'T03,T02,T03'], ['CC', '24', 'T01,T05'], ['DD', '21', 'T02,T06']], columns=('name', 'age', 'taskID'))
    
    df["taskID"] = df["taskID"].str.split(",")
    df.explode("taskID")
    
    

    对于0.25以下的熊猫

    from itertools import chain
    import numpy as np
    import pandas as pd
    
    df = pd.DataFrame([['AA', '20', 'T01,T02'], ['BB', '22', 'T03,T02,T03'], ['CC', '24', 'T01,T05'], ['DD', '21', 'T02,T06']], columns=('name', 'age', 'taskID'))
    df["taskID"] = df["taskID"].str.split(",")
    
    arr = np.repeat(df.iloc[:,:-1].values, df["taskID"].apply(len), axis=0)
    df2 = pd.DataFrame(arr, columns=df.columns[:-1])
    df2["TaskID"] = list(chain(*df["taskID"]))
    
    df2
    

    【讨论】:

    • 嗨,谢谢,我试过你的代码,该列中的值被“[]”包裹。例如第 1 行:AA 20 ['T01', 'T02'] ,它还在同一行(我的 pandas 版本是 0.25)
    • 我已经更新了我的熊猫,但不知何故它仍然无法正常工作。第二个有效~谢谢
    猜你喜欢
    • 2021-03-05
    • 2012-06-16
    • 2021-07-23
    • 2022-01-01
    • 1970-01-01
    • 2015-09-28
    • 1970-01-01
    • 1970-01-01
    • 2018-07-27
    相关资源
    最近更新 更多