Как прочитать матрицу np из фрейма данных pandas, хранящегося в .csv? - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь прочитать np.matrix и фрейм данных pandas из другого хранилища фреймов данных pandas в .csv

Я пытался использовать литерал eval, но он не работает.

Etapa=pd.read_csv(f"data/etapas.csv",encoding="latin_1")
from ast import literal_eval
Etapa.loc[:,"Etapa"]=Etapa.Etapa.map(literal_eval)
Etapa.loc[:,"MatrizTiempos"]=Etapa.MatrizTiempos.apply(literal_eval)
Etapa.loc[:,"DataFrameEscuelas"]=Etapa.DataFrameEscuelas.map(literal_eval)

И ошибка, которая появляется, выглядит примерно так:

Файл "", строка 1 [[0. 0. 0. 0.] ^ ​​SyntaxError: неверный синтаксис

1 Ответ

0 голосов
/ 30 октября 2019

Прямо сейчас у вас есть строковое представление list с неправильным синтаксисом:

from ast import literal_eval

x = '[[0. 0. 0.], [1. 1. 1.]]'
literal_eval(x)
  File "<unknown>", line 1
    [0. 0. 0.]
         ^
SyntaxError: invalid syntax

Я предполагаю, что там есть десятичные дроби, потому что могут быть числа с плавающей запятой:

from ast import literal_eval

x = '[[0. 0. 0.], [1. 1. 1.], [1.3 4.4 5.5]]'

literal_eval(''.join( # join back string fragments
    ', '.join(
        a.split(' ') # split on whitespace and join on commas
    ) for a in x.split(',')
))

[[0, 0, 0], [1, 1, 1], [1.3, 4.4, 5.5]]

Преобразование этого в реализацию вашего фрейма данных:

import pandas as pd
from ast import literal_eval

def to_list(x):
    return literal_eval(''.join(', '.join(a.split(' ')) for a in x.split(',')))

mystr = '[[0. 0. 0.], [1. 1. 1.], [1.3 4.4 5.5]]'

df = pd.DataFrame([{0: mystr} for i in range(5)])

df[0]
0    [[0. 0. 0.], [1. 1. 1.], [1.3 4.4 5.5]]
1    [[0. 0. 0.], [1. 1. 1.], [1.3 4.4 5.5]]
2    [[0. 0. 0.], [1. 1. 1.], [1.3 4.4 5.5]]
3    [[0. 0. 0.], [1. 1. 1.], [1.3 4.4 5.5]]
4    [[0. 0. 0.], [1. 1. 1.], [1.3 4.4 5.5]]
Name: 0, dtype: object

# these are all string types
df[0][0]
'[[0. 0. 0.], [1. 1. 1.], [1.3 4.4 5.5]]'


df[1] = df[0].map(to_list)

# this is now a list type
df[1][0]
[[0.0, 0.0, 0.0], [1.0, 1.0, 1.0], [1.3, 4.4, 5.5]]
...