-1

我有一个看起来像这样的数据 在此处输入图像描述

但是我需要分离标题值并将它们转换为三个不同的列,它应该如下所示。

在此处输入图像描述

实现这一目标的最佳方法是什么?

import matplotlib.pyplot as plt
import pandas as pd
import math
import os

url = 'https://raw.githubusercontent.com/callmedemi/AMPSE/main/machinepara1_gm_m1.csv'
dataset = pd.read_csv(url, encoding='latin')
print(dataset)
dataset1 = dataset.columns
print(dataset1)

答案如下所示:

        wn   ...  leafValue( OP("/I0/M1" "gm") "Vbias" 2 "lp" 4e-05 "wp" 0.0002 ) (S)
0  0.000005  ...                                       6.773000e-21                  
1  0.000008  ...                                       6.774000e-21                  
2  0.000010  ...                                       6.775000e-21                  
3  0.000013  ...                                       6.776000e-21                  
4  0.000015  ...                                       6.776000e-21                  

[5 rows x 251 columns]
Index(['wn ',
       'leafValue( OP("/I0/M1" "gm") "Vbias" 0 "lp" 1.5e-05 "wp" 0.00012 ) (S)',
       'leafValue( OP("/I0/M1" "gm") "Vbias" 0 "lp" 1.5e-05 "wp" 0.00014 ) (S)',
       'leafValue( OP("/I0/M1" "gm") "Vbias" 0 "lp" 1.5e-05 "wp" 0.00016 ) (S)',
       'leafValue( OP("/I0/M1" "gm") "Vbias" 0 "lp" 1.5e-05 "wp" 0.00018 ) (S)',
       'leafValue( OP("/I0/M1" "gm") "Vbias" 0 "lp" 1.5e-05 "wp" 0.0002 ) (S)',
       'leafValue( OP("/I0/M1" "gm") "Vbias" 0 "lp" 2.125e-05 "wp" 0.00012 ) (S)',
       'leafValue( OP("/I0/M1" "gm") "Vbias" 0 "lp" 2.125e-05 "wp" 0.00014 ) (S)',
       'leafValue( OP("/I0/M1" "gm") "Vbias" 0 "lp" 2.125e-05 "wp" 0.00016 ) (S)',
       'leafValue( OP("/I0/M1" "gm") "Vbias" 0 "lp" 2.125e-05 "wp" 0.00018 ) (S)',
       ...
       'leafValue( OP("/I0/M1" "gm") "Vbias" 2 "lp" 3.375e-05 "wp" 0.00012 ) (S)',
       'leafValue( OP("/I0/M1" "gm") "Vbias" 2 "lp" 3.375e-05 "wp" 0.00014 ) (S)',
       'leafValue( OP("/I0/M1" "gm") "Vbias" 2 "lp" 3.375e-05 "wp" 0.00016 ) (S)',
       'leafValue( OP("/I0/M1" "gm") "Vbias" 2 "lp" 3.375e-05 "wp" 0.00018 ) (S)',
       'leafValue( OP("/I0/M1" "gm") "Vbias" 2 "lp" 3.375e-05 "wp" 0.0002 ) (S)',
       'leafValue( OP("/I0/M1" "gm") "Vbias" 2 "lp" 4e-05 "wp" 0.00012 ) (S)',
       'leafValue( OP("/I0/M1" "gm") "Vbias" 2 "lp" 4e-05 "wp" 0.00014 ) (S)',
       'leafValue( OP("/I0/M1" "gm") "Vbias" 2 "lp" 4e-05 "wp" 0.00016 ) (S)',
       'leafValue( OP("/I0/M1" "gm") "Vbias" 2 "lp" 4e-05 "wp" 0.00018 ) (S)',
       'leafValue( OP("/I0/M1" "gm") "Vbias" 2 "lp" 4e-05 "wp" 0.0002 ) (S)'],
      dtype='object', length=251)

如果您看到每个“lp”,“wp”给出五个不同的值,并且每个“Vbias”(范围:0-2)有五个不同的 lp 值。标题是这里的主要问题,因为我无法提取标题。

我想要做的是,从每个“gm”值的标题中提取“Vbias”、“lp”和“wp”,并将它们放在相应的列中。图片文件只是为了更好地理解,真正的 CSV 文件在代码中。

4

1 回答 1

0

尝试从提供的 URL 读取 CSV 文件时,出现编码错误,因此我首先需要一个参数来指定要使用的有效编码。

然后,由于列标题似乎无法使用,并且我们知道要放在那里的确切名称,我们可以简单地用我们自己的列表替换数据框列名称:

import pandas as pd

url = 'https://raw.githubusercontent.com/callmedemi/AMPSE/main/trial.csv'
dataset = pd.read_csv(url, encoding='latin')

# remove imported column headers
df = dataset[1:]  

# and define new ones, based on our knowledge of the data
df.columns = ['wm', 'gm', 'Vbias', 'lp', 'wp' ] 

print(df)

结果:

         wm            gm         Vbias            lp            wp
1  0.000007  4.250000e-08  4.350000e-08  4.440000e-08  4.540000e-08
2  0.000010  5.480000e-08  5.580000e-08  5.670000e-08  5.770000e-08
3  0.000013  6.710000e-08  6.810000e-08  6.900000e-08  7.000000e-08
4  0.000015  7.940000e-08  8.040000e-08  8.130000e-08  8.230000e-08
于 2020-10-17T23:05:36.067 回答