python从文件中提取数据到数据框

我有某种导入的通用索引


f = open(indexfile, "r")

结果对象是一个 _io.TextIOWrapper,如下所示:


GROUP_FIELD_NAME:ID

GROUP_FIELD_VALUE:1 

GROUP_FIELD_NAME:NAME

GROUP_FIELD_VALUE:Joe 

GROUP_OFFSET:0

GROUP_LENGTH:1234

GROUP_FILENAME:/tmp/something1

GROUP_FIELD_NAME:ID

GROUP_FIELD_VALUE:2 

GROUP_FIELD_NAME:NAME

GROUP_FIELD_VALUE:Jenny 

GROUP_OFFSET:1235

GROUP_LENGTH:12

GROUP_FILENAME:/tmp/something2

其中一些数据字段可以通过组合相应的_NAME和_VALUE来提取,而一些字段只需要查看名称(_OFFSET、_LENGTH、_FILENAME)。例如,通过循环遍历每一行并填充列表,如下所示:


Import pandas as pd


ID = []

NAME = []

GROUP_LENGTH = []

GROUP_OFFSET = []

GROUP_FILENAME = []


for line in file:

    if GROUP_OFFSET then add to list

    if GROUP_FIELD_NAME:ID then add GROUP_FIELD_VALUE from next line



a = {'ID': ID,

     'NAME': NAME,

     'GROUP_LENGTH': GROUP_LENGTH,

     'GROUP_OFFSET': GROUP_OFFSET,

     'GROUP_FILENAME': GROUP_FILENAME     

     }


df = pd.DataFrame.from_dict(a, orient='index')


df = df.transpose()

我怎样才能得到这样的东西:


ID     NAME    GROUP_LENGTH    GROUP_OFFSET    GROUP_FILENAME

1      Joe     1234            0               /tmp/something1

2      Jenny   12              1235            /tmp/something2


四季花海
浏览 161回答 2
2回答

MMTTMM

collections.OrderedDict用对象累加记录:import pandas as pdfrom collections import OrderedDictwith open('input.ind') as f:    records = []    for line in f:        name, val = line.strip().split(':')        if name == 'GROUP_FIELD_NAME':            if val == 'ID':                records.append(OrderedDict())            records[-1][val] = next(f).strip().split(':')[1]        else:            records[-1][name] = valdf = pd.DataFrame(records)print(df)预期输出:  ID   NAME GROUP_OFFSET GROUP_LENGTH   GROUP_FILENAME0  1    Joe            0         1234  /tmp/something11  2  Jenny         1235           12  /tmp/something2

慕村225694

如果要直接获取 Dataframe,建议使用read_csv,将sep参数设置为:.现在,您应该有一个包含两列的 DataFrame:一列带有名称,另一列带有值。然后,您可以使用例如groupby对行进行分组并对分组进行一些操作。一个“官方”的例子>>> df = pd.DataFrame({'Animal': ['Falcon', 'Falcon',...                               'Parrot', 'Parrot'],...                    'Max Speed': [380., 370., 24., 26.]})>>> df   Animal  Max Speed0  Falcon      380.01  Falcon      370.02  Parrot       24.03  Parrot       26.0>>> df.groupby(['Animal']).mean()        Max SpeedAnimalFalcon      375.0Parrot       25.0最后,使用transpose,您可以获得最终的Dataframe。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python