Как разбить одну строку на несколько столбцов с конкретными номерами столбцов в Python? - PullRequest
2 голосов
/ 29 апреля 2019

У меня есть данные в одной строке, как упомянуто ниже, но я хочу преобразовать строку в 8 столбцов, и индекс столбца будет выглядеть как var1, var2, var3, var4, var5, var6, var7, var8

0   0.008985
1   0.486024
2   0.800637
3   0.006264
4   5.030551
5   0.001959
6   0.002210
7   0.005949
8   0.008985
9   0.689814
10  0.889638
11  0.007462
12  5.589760
13  0.005739
14  0.006474
15  0.004770
16  0.008985
17  0.202327
18  0.152252
19  0.004041

Я хочу иметь фрейм данных в этом формате:

 var1 |  var2  |  var3  |  var4  |  var5  |  var6  |  var7  |var8
0.008985|0.486024|0.800637|0.006264|5.030551|0.001959|0.005949|0.002210
0.008985|0.689814|0.889638|0.007462|5.589760|0.005739|0.006474|0.004770

подскажите, пожалуйста, как преобразовать этот фрейм данных в python?

Заранее спасибо

Ответы [ 3 ]

1 голос
/ 29 апреля 2019

Вы можете преобразовать данные в массив numpy и изменить их. Затем создайте DataFrame из этого numpy массива:

import pandas as pd
import numpy as np

n = 20
df = pd.DataFrame({'row': range(n)})
df = pd.DataFrame(np.array(df.row).reshape(2, -1))
df.columns = [f'var{i}' for i in range(1, n//2 + 1)]
1 голос
/ 29 апреля 2019

Использовать решение numpy - изменено unutbu ответить немного - инициализировать пустой массив, заполненный NaN s:

arr = np.full(((len(df) - 1)//8 + 1)*8, np.nan)
arr[:len(df)] = df['col']
df = pd.DataFrame(arr.reshape((-1, 8)), columns=[f'var{i}' for i in range(1,9)])
print (df)
       var1      var2      var3      var4      var5      var6      var7  \
0  0.008985  0.486024  0.800637  0.006264  5.030551  0.001959  0.002210   
1  0.008985  0.689814  0.889638  0.007462  5.589760  0.005739  0.006474   
2  0.008985  0.202327  0.152252  0.004041       NaN       NaN       NaN   

       var8  
0  0.005949  
1  0.004770  
2       NaN  
1 голос
/ 29 апреля 2019

Использование:

cols=['var'+str(i+1) for i in range(8)]
#['var1', 'var2', 'var3', 'var4', 'var5', 'var6', 'var7', 'var8']
df=pd.DataFrame(df.groupby(df.index//8)[1].apply(list).values.tolist(),columns=cols)
print(df)

       var1      var2      var3      var4      var5      var6      var7  \
0  0.008985  0.486024  0.800637  0.006264  5.030551  0.001959  0.002210   
1  0.008985  0.689814  0.889638  0.007462  5.589760  0.005739  0.006474   
2  0.008985  0.202327  0.152252  0.004041       NaN       NaN       NaN   

       var8  
0  0.005949  
1  0.004770  
2       NaN  

Примечание Заменить 1 исходным именем столбца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...