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

如何在 Python 中使用来自数组输出的数据创建表

如何在 Python 中使用来自数组输出的数据创建表

扬帆大鱼 2022-06-14 15:31:50
我打印出组合数组并保存到文本文件中,如下所示:({    ngram_a67e6f3205f0-n: 1,    logreg_c120232d9faa-regParam: 0.01,    cntVec_9c0e7831261d-vocabSize: 10000},0.8580469779197205)({    ngram_a67e6f3205f0-n: 2,    logreg_c120232d9faa-regParam: 0.01,    cntVec_9c0e7831261d-vocabSize: 10000},0.8880895806519427)({    ngram_a67e6f3205f0-n: 3,    logreg_c120232d9faa-regParam: 0.01,    cntVec_9c0e7831261d-vocabSize: 10000},0.8656452460818544)我希望提取数据来生成 python Dataframe,它就像:1, 10000, 0.85804697791972052, 10000, 0.8880895806519427
查看完整描述

2 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

我的建议是尽可能更改文件的输入格式。这将大大简化您的生活。

如果这是不可能的,以下代码可以解决您的问题:


import pandas as pd

import re


pattern_tuples = '(?<=\()[^\)]*'

pattern_numbers = '[ ,](?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?'

col_name = ['ngram', 'logreg', 'vocabSize', 'score']


with open('test.txt','r') as f:

    matchs = re.findall(pattern_tuples, f.read())

    arr_data = [[float(val.replace(',','')) for val in re.findall(pattern_numbers, match)] for match in matchs]

    df = pd.DataFrame(arr_data, columns=col_name).astype({'ngram':'int', 'vocabSize': 'int'})

并给出:


   ngram  logreg  vocabSize     score

0      1    0.01      10000  0.858047

1      2    0.01      10000  0.888090

2      3    0.01      10000  0.865645

简要说明

  1. 读取文件

  2. 使用re.findall和正则表达式pattern_tuples查找文件中的所有元组

  3. 对于每个元组,使用正则表达式pattern_numbers你会找到你感兴趣的 4 个数值。通过这种方式,您将获得包含您的数据的列表列表

  4. 在 pandas 数据框中输入结果


额外的

以下是您如何将简历结果保存为json 格式,以便您更轻松地管理它们:

  1. 创建一个cv_results数组来保存 CV 结果

  2. 对于每个循环的 CV,您将获得一个t包含结果的元组,您必须将其转换为字典并挂在数组中cv_results

  3. 在 CV 循环结束时,将结果保存为 json 格式

.

cv_results = []


for _ in range_cv: # Loop CV

    # ... Calculate results of CV in t

    t = ({'ngram_a67e6f3205f0-n': 1,

       'logreg_c120232d9faa-regParam': 0.01,

       'cntVec_9c0e7831261d-vocabSize': 10000},

      0.8580469779197205) # FAKE DATA for this example


    # append results like a dict

    cv_results.append({'res':t[0], 'score':t[1]})


# Store results in json format

with open('cv_results.json', 'w') as outfile:

    json.dump(cv_results, outfile, indent=4)

现在您可以读取 json 文件,并且可以像普通 python 字典一样访问所有字段:


with open('cv_results.json') as json_file:

    data = json.load(json_file)


data[0]['score']

# output: 0.8580469779197205


查看完整回答
反对 回复 2022-06-14
?
慕少森

TA贡献2019条经验 获得超9个赞

为什么不这样做:


import pandas as pd

With open(file.txt) as file:

    df = pd.DataFrame([i for i in eval(file.readline())])

Eval 接受一个字符串并将其转换为非常漂亮的文字 python 表示形式。这会将每个括号转换为单个项目迭代器,然后将其存储到列表中。Pd 数据框类可以获取具有相同键的字典列表并创建数据框


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

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号