为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

四季花海 2022-06-02 15:45:41
我有某种导入的通用索引f = open(indexfile, "r")结果对象是一个 _io.TextIOWrapper,如下所示:GROUP_FIELD_NAME:IDGROUP_FIELD_VALUE:1 GROUP_FIELD_NAME:NAMEGROUP_FIELD_VALUE:Joe GROUP_OFFSET:0GROUP_LENGTH:1234GROUP_FILENAME:/tmp/something1GROUP_FIELD_NAME:IDGROUP_FIELD_VALUE:2 GROUP_FIELD_NAME:NAMEGROUP_FIELD_VALUE:Jenny GROUP_OFFSET:1235GROUP_LENGTH:12GROUP_FILENAME:/tmp/something2其中一些数据字段可以通过组合相应的_NAME和_VALUE来提取,而一些字段只需要查看名称(_OFFSET、_LENGTH、_FILENAME)。例如,通过循环遍历每一行并填充列表,如下所示:Import pandas as pdID = []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 linea = {'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_FILENAME1      Joe     1234            0               /tmp/something12      Jenny   12              1235            /tmp/something2
查看完整描述

2 回答

?
MMTTMM

TA贡献1869条经验 获得超4个赞

collections.OrderedDict用对象累加记录:


import pandas as pd

from collections import OrderedDict


with 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] = val


df = pd.DataFrame(records)

print(df)

预期输出:


  ID   NAME GROUP_OFFSET GROUP_LENGTH   GROUP_FILENAME

0  1    Joe            0         1234  /tmp/something1

1  2  Jenny         1235           12  /tmp/something2


查看完整回答
反对 回复 2022-06-02
?
慕村225694

TA贡献1880条经验 获得超4个赞

如果要直接获取 Dataframe,建议使用read_csv,将sep参数设置为:.


现在,您应该有一个包含两列的 DataFrame:一列带有名称,另一列带有值。


然后,您可以使用例如groupby对行进行分组并对分组进行一些操作。一个“官方”的例子


>>> df = pd.DataFrame({'Animal': ['Falcon', 'Falcon',

...                               'Parrot', 'Parrot'],

...                    'Max Speed': [380., 370., 24., 26.]})

>>> df

   Animal  Max Speed

0  Falcon      380.0

1  Falcon      370.0

2  Parrot       24.0

3  Parrot       26.0

>>> df.groupby(['Animal']).mean()

        Max Speed

Animal

Falcon      375.0

Parrot       25.0

最后,使用transpose,您可以获得最终的Dataframe。


查看完整回答
反对 回复 2022-06-02
  • 2 回答
  • 0 关注
  • 160 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信