如何将列表中的元素拆分和生成到数据仓库

时间:2019-09-16 15:10:49

标签: python pandas list dataframe

假设我有以下列表,

l1 =    ['SAP_QGF_126151_HFM_1_MOB_T_GFG_XZY_S7_L001_R1_001_MM_1.gz',
         'SAP_QGF_126151_HFM_1_MOB_T_GFG_XZY_S7_L001_R2_001_MM_1.gz',
         'SAP_QGF_126151_HFM_2_MOB_T_GFG_XZY_S7_L002_R1_001_MM_1.gz',
         'SAP_QGF_126151_HFM_2_MOB_T_GFG_XZY_S7_L002_R2_001_MM_1.gz']

我想将上面的列表转换为一个具有四列的数据框。 首先,我想在_上拆分它,并根据if条件,将第5个字符串用作第一列,将第4个字符串用作第二列,并将列表中第一和第二个元素的整个字符串用作第三和第四列

我试图生成它们的表单列表,

col1    = [x.split('_')[5] for x in l1]
col2    = [x.split('_')[4] for x in l1]
col3     = [x.split('_')[10] for x in l1 if x == "L001"]
col4     = [x.split('_')[10] for x in l1 if x == "L002"]

但是,对于col3col4,如果条件为if,则不会返回任何内容。

我尝试使用以下单行代码转换所有列表:

pd.DataFrame( {'col1': col1, 'col2': col2, 'col3': col3, 'col4':col4 })

最后,我希望有一个数据框,作为我想要的输出

col1  col2 col3 col4 
MOB   1   SAP_QGF_126151_HFM_1_MOB_T_GFG_XZY_S7_L001_R1_001_MM_1.gz SAP_QGF_126151_HFM_1_MOB_T_GFG_XZY_S7_L001_R2_001_MM_1.gz      
MOB   2   SAP_QGF_126151_HFM_1_MOB_T_GFG_XZY_S7_L002_R1_001_MM_1.gz SAP_QGF_126151_HFM_1_MOB_T_GFG_XZY_S7_L002_R2_001_MM_1.gz

因此,我需要列表l1中的第一个元素在col3中,而在列表col4中的第二个元素在第一个row中。因此,作为col3中的第三个元素和col4中的第四个元素,这两个元素都必须位于第二个row中。

任何建议或指示都值得赞赏

1 个答案:

答案 0 :(得分:1)

col1 = [x.split('_')[5] for x in l1]
col2 = [x.split('_')[4] for x in l1]
col3 = [x for x in l1 if x.split('_')[10] == "L001"]
col4 = [x for x in l1 if x.split('_')[10] == "L002"]
pd.DataFrame( {'col1': col1[:len(col3)], 'col2': col2[:len(col3)], 'col3': col3, 'col4':col4 })