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

2024-10-01 22:29:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我打印出组合数组并保存到文本文件中,如下所示:

({
    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.8580469779197205
2, 10000, 0.8880895806519427

Tags: 数据dataframe数组文本文件ngramlogregregparamvocabsize
2条回答

为什么不这样做:

import pandas as pd
With open(file.txt) as file:
    df = pd.DataFrame([i for i in eval(file.readline())])

Eval获取一个字符串并将其转换为python的文本表示形式,这非常漂亮。这将把每个附加项转换为一个iterator,然后将其存储到一个列表中。Pd dataframe类可以获取具有相同键的字典列表并创建一个dataframe

我的建议是,如果可能的话,更改文件的输入格式。这会大大简化你的生活。
如果这是不可能的,下面的代码可以解决您的问题:

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和regex pattern_tuples查找文件中的所有元组

  3. 对于每个元组,使用regex pattern_numbers可以找到您感兴趣的4个数值。这样,您将获得包含您的数据的列表

  4. 在数据框中输入结果


额外的

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

  1. 创建cv_results数组以保留CV结果

  2. 对于CVs的每个循环,您将得到一个包含结果的元组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

相关问题 更多 >

    热门问题