#python #pandas #машинное_обучение #numpy #dataframe
В общем задача такая, имеется датафрейм, содержащий данные вида:
Id Sequence
3 1,3,13...
7 1,2,1,...
8 1,2,4,...
11 1,8,25...
13 1,111,..
Где id - номер последовательности, sequence - сама последовательность.
Задача, взять например первую последовательность и расположить его в столбец и так
со всеми. Количество элементов в последовательности везде разное.
Я делаю так:
#Импортируем необходимые пакеты
import sys
import warnings
import pandas as pd
import numpy as np
from sklearn.metrics import mean_absolute_error, mean_squared_error
import statsmodels.formula.api as smf
import statsmodels.tsa.api as smt
import statsmodels.api as sm
import scipy.stats as scs
from scipy.optimize import minimize
import matplotlib.pyplot as plt
#читаем данные и выводим
dftrain = pd.read_csv('../../data/IntegerSeqTrain.csv', sep=",", index_col=['Id'])
dftrain.head(10)
Выдаст: (то, что sequence выше id меня уже смущает)
Sequence
Id
3 1,3,13...
7 1,2,1,...
8 1,2,4,...
11 1,8,25...
13 1,111,...
Далее, собственно само разбиение
#для удобства пишем последовательности в столбец, предварительно разбив по запятой
print(dftrain.shape[1])
i=0
for dfitem in dftrain:
j=0
for dfitem2 in dfitem:
dftrain[j] = dftrain['Sequence'].str.split(',').str.get(j)
j+=1
i+=1
#удаляем лишний столбец
dftrain = dftrain.drop('Sequence', 1)
#pd.set_option('max_colwidth', 10)
#что получилось
print(dftrain.head(10))
На выходе:
0 1 2 3 4 5 6 7
Id
3 1 3 13 87 1053 28576 2141733 508147108
7 1 2 1 5 5 1 11 16
8 1 2 4 5 8 10 16 20
11 1 8 25 83 274 2275 132224 1060067
13 1 111 12211 1343211 147753211 162528... 178781... 196659...
15 1 1 1 1 1 1 1 1
16 840 1320 1680 2520 3192 3432 4920 5208
Все записалось в строку, а не в столбец
Количество столбцов сильно сократилось (штук 8-9, хотя их на самом деле гораздо больше)
Как данные красиво разбить и представить в виде столбцов?) Спасибо заранее
Сами данные(train.csv): https://dropmefiles.com/osxrI
Исходник (IPYNB файл): https://dropmefiles.com/cIR4f
Ответы
Ответ 1
Решение: train = pd.read_csv(r'C:\download\train.csv', sep=",", index_col=['Id']) r = train.Sequence.str.split(',', expand=True).T Результат: In [203]: r Out[203]: Id 3 7 8 11 13 15 16 ... 227681 227682 227683 227684 227686 227689 227690 0 1 1 1 1 1 1 840 ... 7 1 0 0 0 2 5 1 3 2 2 8 111 1 1320 ... 7 0 0 -1 1 3 7 2 13 1 4 25 12211 1 1680 ... 3 1 4 -1 9 3 179 3 87 5 5 83 1343211 1 2520 ... 2 0 1198 -1 85 4 229 4 1053 5 8 274 147753211 1 3192 ... 3 0 1829388 -1 801 6 439 5 28576 1 10 2275 16252853211 1 3432 ... 9 0 23796035743 10324303 7549 4 557 6 2141733 11 16 132224 1787813853211 1 4920 ... 5 0 2142967506078650 -6586524273069171148 71145 5 6113 .. ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 341 None None None None None None None ... None None None None None None None 342 None None None None None None None ... None None None None None None None 343 None None None None None None None ... None None None None None None None 344 None None None None None None None ... None None None None None None None 345 None None None None None None None ... None None None None None None None 346 None None None None None None None ... None None None None None None None 347 None None None None None None None ... None None None None None None None [348 rows x 113845 columns] In [204]: r.columns Out[204]: Int64Index([ 3, 7, 8, 11, 13, 15, 16, 18, 20, 21, ... 227677, 227679, 227680, 227681, 227682, 227683, 227684, 227686, 227689, 227690], dtype='int64', name='Id', length=113845) In [205]: r.shape Out[205]: (348, 113845)
Комментариев нет:
Отправить комментарий