首页 > 解决方案 > 使用分隔符从列表中提取数据

问题描述

我有一组 10 个以下格式的 python 列表:

[ABC*DEF*123>~123*999*HHH]
[PQR*RST*567>~AWS*999*POI]
[XYZ*TGT*234>~2352*245*HFT]
[STU*DEF*789>~654*345*QQQ]

我正在尝试从上面的列表中提取数据,以便最终输出是 Dataframe 并期望以下输出

123,999,HHH
AWS,999,POI
2352,245,HFT
654,345,QQQ

以下是我迄今为止所做的:

allFiles = Path where all the txt files are stored
list_ = []
for file_ in allFiles:
    with open(file_) as fp:
        lines1 = fp.read().split('\n')
        b = [i.split('~', 1)[1] for i in lines1]
        print(b)

上面给了我一个如下列表:

[123*999*HHH]
[AWS*999*POI]
[2352*245*HFT]
[654*345*QQQ]

我无法使用分隔符 (*) 提取上述数据并将它们拆分为不同的列并将其保存到 Dataframe

标签: pythonstringpandaslist

解决方案


您可以首先创建一个将字符串列表作为行的数据框,然后~使用str.split. 然后,您可以只选择第二个术语,然后再进行另一个拆分,这次通过*,设置expand=True

l1 = ['ABC*DEF*123>~123*999*HHH']
l2 = ['PQR*RST*567>~AWS*999*POI']
l3 = ['XYZ*TGT*234>~2352*245*HFT']
l4 = ['STU*DEF*789>~654*345*QQQ']

df = pd.DataFrame([l1,l2,l3,l4], columns=['col1'])
df.col1.str.split('~').str[1].str.split('*', expand=True)

     0    1    2
0   123  999  HHH
1   AWS  999  POI
2  2352  245  HFT
3   654  345  QQQ

更新

对于来自多个文件的列表执行上述操作:

l = []
for file_ in allFiles:
    f = open(file_, 'r')
    l.extend([line.rstrip('\n') for line in f.readlines()])

然后像以前一样做:

df = pd.DataFrame(l, columns=['col1'])
df.col1.str.split('~').str[1].str.split('*', expand=True)

推荐阅读