Как преобразовать Dataframe с массивами в строках в пустую матрицу? - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть файл CSV, в котором есть массив в каждой строке.Я хотел бы преобразовать содержимое строки в столбцы, то есть в конце матрицы (так как у меня несколько строк).Я могу сделать это с помощью цикла for и csv.reader - но это довольно медленно.Итак, у меня была идея, что Панды будут быстрее, и что я мог бы выполнить преобразование без необходимости в цикле.Я читаю файл и получаю тип размера Datframe (200,1) - где каждая строка содержит 700 чисел с плавающей запятой, разделенных запятой, например [0,4, 0,5, 0,3, ....]

Если я это сделаюзначение на выходе. Я просто преобразовываю его в тип объекта - все еще нельзя использовать ...

Я просто не могу понять, как преобразовать эти данные в матрицу ...

Я смотрю не туда?

ranges = pd.read_csv(name,usecols=['ranges'])

Что работает так:

X = open(name)
csv_X=csv.reader(X)
ranges = []next(csv_X)#jump over the first row in the csv
for row in csv_X:
    ranges.append(ast.literal_eval(row[14]))
X.close()

Но это очень медленно.Итак, моя идея об использовании Pandas состоит в том, чтобы ускорить это.

1 Ответ

0 голосов
/ 12 февраля 2019

Набор данных выглядит следующим образом:

                            range
0  [5, 5, 7, 5, 7, 2, 0, 4, 1, 6]
1  [1, 0, 6, 1, 1, 5, 7, 8, 6, 7]
2  [2, 0, 4, 6, 6, 6, 5, 1, 6, 5]
3  [5, 5, 2, 7, 1, 8, 7, 2, 8, 4]
4  [1, 5, 6, 6, 8, 2, 6, 6, 3, 1]

Вы можете попробовать:

pd.DataFrame(np.vstack(df.range.values))

, что дает:

   0  1  2  3  4  5  6  7  8  9
0  5  5  7  5  7  2  0  4  1  6
1  1  0  6  1  1  5  7  8  6  7
2  2  0  4  6  6  6  5  1  6  5
3  5  5  2  7  1  8  7  2  8  4
4  1  5  6  6  8  2  6  6  3  1

Отредактировано

Если ваши строки представляют собой строки, такие как:

                ranges
0  8,9,7,6,3,2,4,1,8,3
1  7,9,9,2,1,6,4,1,8,2
2  9,3,0,9,7,7,0,9,9,6
3  0,7,1,0,5,5,1,2,4,2
4  3,3,8,0,8,7,3,6,6,2
5  9,3,7,6,5,7,8,3,8,7
6  1,6,7,8,5,6,7,0,7,8
7  5,5,0,9,2,1,5,4,3,4
8  3,8,9,8,6,3,8,5,9,8
9  8,5,1,7,1,4,8,1,6,4

Попробуйте:

pd.DataFrame(df.ranges.str.split(',').tolist())

, что приводит к:

   0  1  2  3  4  5  6  7  8  9
0  8  9  7  6  3  2  4  1  8  3
1  7  9  9  2  1  6  4  1  8  2
2  9  3  0  9  7  7  0  9  9  6
3  0  7  1  0  5  5  1  2  4  2
4  3  3  8  0  8  7  3  6  6  2
5  9  3  7  6  5  7  8  3  8  7
6  1  6  7  8  5  6  7  0  7  8
7  5  5  0  9  2  1  5  4  3  4
8  3  8  9  8  6  3  8  5  9  8
9  8  5  1  7  1  4  8  1  6  4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...