Как мне разделить значения заголовка и преобразовать их в разные столбцы?

#python #pandas

#python #pandas

Вопрос:

У меня есть данные, которые выглядят следующим образом введите описание изображения здесь

Однако мне нужно разделить значения заголовка и преобразовать их в три разных столбца, и это должно выглядеть следующим образом.

введите описание изображения здесь

Каков наилучший метод для достижения этой цели?

 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. Заголовок здесь является основной проблемой, поскольку я не могу извлечь заголовок.

Что я хочу сделать, так это извлечь «Vbias», «lp» и «wp» из заголовка для каждого из значений «gm» и поместить их в соответствующие столбцы. Файлы изображений предназначены только для лучшего понимания, настоящий файл CSV находится в коде.

Ответ №1:

При попытке прочитать файл CSV с предоставленного URL-адреса я получил ошибку кодирования, поэтому сначала мне понадобился аргумент, чтобы указать допустимую кодировку, которая будет использоваться.

Затем, поскольку заголовки столбцов кажутся непригодными для использования, и мы знаем точные имена, которые мы хотим туда поместить, мы можем просто заменить имена столбцов фрейма данных нашим собственным списком:

 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
  

Комментарии:

1. Я думаю, что я не смог дать четкую картину проблемы. Заголовок здесь не является тарабарщиной. Мне нужны значения из Vbias, lp и wp из заголовка, который изменяется. Таким образом, wp изменяется пять раз для каждого lp, а lp изменяется пять раз для каждого vbias, и их соответствующие значения записываются в выходные данные. Если вы сравните Vbias, lp и wp, вы увидите, что это значения, указанные в заголовке, а не значения gm.

2. Я вижу. Каков ожидаемый шаблон в заголовке? Какие части меняются в этом тексте?

3. Итак, для Vbias = 0, lp = 1.5e-05 wp изменяется с 0.00012 на 0.00020 как (0.00012,0.00014,0.00016,0.00018,0.00020). И для каждого изменения lp Vbias также изменяется с 0 на 2.