假设我有以下列表,
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"]
但是,对于col3
和col4
,如果条件为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
中。
任何建议或指示都值得赞赏
答案 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 })