Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将.txt文件中的长文本插入数据帧_Python_Pandas_Dataframe_Text Files - Fatal编程技术网

Python 如何将.txt文件中的长文本插入数据帧

Python 如何将.txt文件中的长文本插入数据帧,python,pandas,dataframe,text-files,Python,Pandas,Dataframe,Text Files,我正在建立一个CNN模型,我必须分析每个时代的训练历史。大纪元历史是这样的。此历史记录保存在.txt文件中 Epoch 1/300 11/11 [==============================] - 4s 182ms/step - loss: 8.3641 - accuracy: 0.1382 - f1_m: 0.0676 - precision_m: 0.2398 - recall_m: 0.0408 - lr: 1.0000e-04 - val_loss: 8.6183 - v

我正在建立一个CNN模型,我必须分析每个时代的训练历史。大纪元历史是这样的。此历史记录保存在
.txt
文件中

Epoch 1/300
11/11 [==============================] - 4s 182ms/step - loss: 8.3641 - accuracy: 0.1382 - f1_m: 0.0676 - precision_m: 0.2398 - recall_m: 0.0408 - lr: 1.0000e-04 - val_loss: 8.6183 - val_accuracy: 0.0952 - val_f1_m: 0.0630 - val_precision_m: 0.1872 - val_recall_m: 0.0379 - val_lr: 1.0000e-04
Epoch 2/300
11/11 [==============================] - 1s 129ms/step - loss: 6.1399 - accuracy: 0.5581 - f1_m: 0.5011 - precision_m: 0.7591 - recall_m: 0.3781 - lr: 1.0000e-04 - val_loss: 6.6084 - val_accuracy: 0.4230 - val_f1_m: 0.1302 - val_precision_m: 0.6426 - val_recall_m: 0.0725 - val_lr: 1.0000e-04
.
.
Epoch 300/300
11/11 [==============================] - 1s 132ms/step - loss: 0.7877 - accuracy: 0.9913 - f1_m: 0.9911 - precision_m: 0.9928 - recall_m: 0.9894 - lr: 1.0000e-04 - val_loss: 1.7068 - val_accuracy: 0.8314 - val_f1_m: 0.8347 - val_precision_m: 0.8433 - val_recall_m: 0.8263 - val_lr: 1.0000e-04
为了分析历代历史,我需要将这些数据填充到一个表中。在Python中,我认为使用DataFrame是一个好主意。另外,在DataFrame的末尾,我还想计算每列的平均值。为了举例说明,我希望数据框看起来像下图:(我使用Ms.Excel制作)

我想问的是:

  • 如何在
    .txt
    文件上执行子字符串以获取DataFrame
    列的所有数据?据我所知,DataFrame需要
    才能获取数据,而我目前不知道如何从我的
    .txt
    文件中获取数据
  • 如果问题1是可行的,那么如何将值存储在Python变量中,然后在数据帧中填充它

  • 我假设您可以读取
    .txt
    文件,并将其保存为类似
    text
    的变量。然后您可以执行以下操作:

    import pandas as pd
    
    
    text = '''Epoch 1/300
    11/11 [==============================] - 4s 182ms/step - loss: 8.3641 - accuracy: 0.1382 - f1_m: 0.0676 - precision_m: 0.2398 - recall_m: 0.0408 - lr: 1.0000e-04 - val_loss: 8.6183 - val_accuracy: 0.0952 - val_f1_m: 0.0630 - val_precision_m: 0.1872 - val_recall_m: 0.0379 - val_lr: 1.0000e-04
    Epoch 2/300
    11/11 [==============================] - 1s 129ms/step - loss: 6.1399 - accuracy: 0.5581 - f1_m: 0.5011 - precision_m: 0.7591 - recall_m: 0.3781 - lr: 1.0000e-04 - val_loss: 6.6084 - val_accuracy: 0.4230 - val_f1_m: 0.1302 - val_precision_m: 0.6426 - val_recall_m: 0.0725 - val_lr: 1.0000e-04
    Epoch 3/300
    11/11 [==============================] - 1s 132ms/step - loss: 0.7877 - accuracy: 0.9913 - f1_m: 0.9911 - precision_m: 0.9928 - recall_m: 0.9894 - lr: 1.0000e-04 - val_loss: 1.7068 - val_accuracy: 0.8314 - val_f1_m: 0.8347 - val_precision_m: 0.8433 - val_recall_m: 0.8263 - val_lr: 1.0000e-04
    '''
    
    data = []
    for i, line in enumerate(text.split('\n')[1::2], start=1):
        obj = {}
        obj['epoch'] = i
        for x in line.split(' - ')[2:]:
            k, v = x.split(':')
            obj[k] = v.lstrip()
        data.append(obj)
    
    df = pd.DataFrame(data).astype(float)
    
    打印
    df
    ,我们得到:

    |    |   epoch |   loss |   accuracy |   f1_m |   precision_m |   recall_m |     lr |   val_loss |   val_accuracy |   val_f1_m |   val_precision_m |   val_recall_m |   val_lr |
    |---:|--------:|-------:|-----------:|-------:|--------------:|-----------:|-------:|-----------:|---------------:|-----------:|------------------:|---------------:|---------:|
    |  0 |       1 | 8.3641 |     0.1382 | 0.0676 |        0.2398 |     0.0408 | 0.0001 |     8.6183 |         0.0952 |     0.063  |            0.1872 |         0.0379 |   0.0001 |
    |  1 |       2 | 6.1399 |     0.5581 | 0.5011 |        0.7591 |     0.3781 | 0.0001 |     6.6084 |         0.423  |     0.1302 |            0.6426 |         0.0725 |   0.0001 |
    |  2 |       3 | 0.7877 |     0.9913 | 0.9911 |        0.9928 |     0.9894 | 0.0001 |     1.7068 |         0.8314 |     0.8347 |            0.8433 |         0.8263 |   0.0001 |
    
    我喜欢将数据存储到dict的
    列表中,因为
    DataFrame
    将处理列的名称和值。查看
    数据
    的功能:

    [{'epoch': 1,
      'loss': '8.3641',
      'accuracy': '0.1382',
      'f1_m': '0.0676',
      'precision_m': '0.2398',
      'recall_m': '0.0408',
      'lr': '1.0000e-04',
      'val_loss': '8.6183',
      'val_accuracy': '0.0952',
      'val_f1_m': '0.0630',
      'val_precision_m': '0.1872',
      'val_recall_m': '0.0379',
      'val_lr': '1.0000e-04'},
     {'epoch': 2,
      'loss': '6.1399',
      'accuracy': '0.5581',
      'f1_m': '0.5011',
      'precision_m': '0.7591',
      'recall_m': '0.3781',
      'lr': '1.0000e-04',
      'val_loss': '6.6084',
      'val_accuracy': '0.4230',
      'val_f1_m': '0.1302',
      'val_precision_m': '0.6426',
      'val_recall_m': '0.0725',
      'val_lr': '1.0000e-04'},
     {'epoch': 3,
      'loss': '0.7877',
      'accuracy': '0.9913',
      'f1_m': '0.9911',
      'precision_m': '0.9928',
      'recall_m': '0.9894',
      'lr': '1.0000e-04',
      'val_loss': '1.7068',
      'val_accuracy': '0.8314',
      'val_f1_m': '0.8347',
      'val_precision_m': '0.8433',
      'val_recall_m': '0.8263',
      'val_lr': '1.0000e-04'}]