#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)
Комментариев нет:
Отправить комментарий