代码之家  ›  专栏  ›  技术社区  ›  steff

将日期的python列表解析为pandas数据帧

  •  1
  • steff  · 技术社区  · 6 年前

    需要一些帮助/建议如何将日期写入熊猫数据框。我有这样的python列表:

    ['',
     '20180715:1700-20180716:1600',
     '20180716:1700-20180717:1600',
     '20180717:1700-20180718:1600',
     '20180718:1700-20180719:1600',
     '20180719:1700-20180720:1600',
     '20180721:CLOSED',
     '20180722:1700-20180723:1600',
     '20180723:1700-20180724:1600',
     '20180724:1700-20180725:1600',
     '20180725:1700-20180726:1600',
     '20180726:1700-20180727:1600',
     '20180728:CLOSED']
    

    有没有一种简单的方法可以将其转换为具有两列(开始时间和结束时间)的熊猫数据帧?

    1 回复  |  直到 6 年前
        1
  •  3
  •   jezrael    6 年前

    样品:

    L = ['',
     '20180715:1700-20180716:1600',
     '20180716:1700-20180717:1600',
     '20180717:1700-20180718:1600',
     '20180718:1700-20180719:1600',
     '20180719:1700-20180720:1600',
     '20180721:CLOSED',
     '20180722:1700-20180723:1600',
     '20180723:1700-20180724:1600',
     '20180724:1700-20180725:1600',
     '20180725:1700-20180726:1600',
     '20180726:1700-20180727:1600',
     '20180728:CLOSED']
    

    我认为这里最好的方法是使用按分隔符拆分的列表理解和不使用分隔符筛选出值:

    df = pd.DataFrame([x.split('-') for x in L if '-' in x], columns=['start','end'])
    print (df)
               start            end
    0  20180715:1700  20180716:1600
    1  20180716:1700  20180717:1600
    2  20180717:1700  20180718:1600
    3  20180718:1700  20180719:1600
    4  20180719:1700  20180720:1600
    5  20180722:1700  20180723:1600
    6  20180723:1700  20180724:1600
    7  20180724:1700  20180725:1600
    8  20180725:1700  20180726:1600
    9  20180726:1700  20180727:1600
    

    熊猫解决方案也是可能的,特别是在需要的时候 Series -这是用过的 split dropna :

    s = pd.Series(L)
    
    df = s.str.split('-', expand=True).dropna(subset=[1])
    df.columns = ['start','end']
    print (df)
                start            end
    1   20180715:1700  20180716:1600
    2   20180716:1700  20180717:1600
    3   20180717:1700  20180718:1600
    4   20180718:1700  20180719:1600
    5   20180719:1700  20180720:1600
    7   20180722:1700  20180723:1600
    8   20180723:1700  20180724:1600
    9   20180724:1700  20180725:1600
    10  20180725:1700  20180726:1600
    11  20180726:1700  20180727:1600