О строке в массив и массив в строку? - PullRequest
0 голосов
/ 21 февраля 2019

Я использую функцию df.to_csv для хранения информации, и формат элемента np.float32 в weight_list, как показано ниже.

df = pd.DataFrame(data=weight_list,index=img_names,columns=var_list)
df.to_csv('{}/{}'.format(dirs_path,csv_name))

Затем я использую pandas.read_csv для загрузкиCSV-файл, значение элемента обязательно в формате строки.Как я могу преобразовать строку в np.float32?

Дополнительная информация: тип элементов - массив в файле CSV, и массивы имеют разные размеры, как показано ниже: структура данных CSV

1 Ответ

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

Не зная больше о структуре данных, я бы порекомендовал попробовать pd.read_csv("mycsv.csv").astype(np.float32).astype попытается преобразовать данные в DataFrame в указанный формат.


Вышеприведенное должно решить вашу проблему, но вы также можете проверить версию используемых вами панд (иэто документация для to_csv и read_csv).

В версии pandas 0.23.4 на Python 3.7 мне удалось записать в CSV фрейм данных, полный float64, и успешно прочитать их с правильными типами dty.

Сначала сгенерировать некоторые данные,запишите его, затем прочитайте обратно (при условии, что weight_list является матрицей чисел с плавающей запятой):

>>> import numpy as np
>>> import pandas as pd
>>> # Generate dummy dataframe and write it to a CSV
>>> weights=np.random.rand(10,10) # Generate dummy 10x10 matrix of random floats
>>> names=['name{}'.format(i) for i in range(10)] # Generate dummy names and variable names
>>> var_list = ['var{}'.format(i) for i in range(10)]
>>> df0 = pd.DataFrame(data=weights, columns=var_list, index=names)
>>> df0.to_csv("test.csv")
>>> # Load the CSV back into a new dataframe
>>> df1=pd.read_csv("test.csv")

Затем убедитесь, что dtypes верны (df0.values просто возвращает данные внутри DataFrame в виде пустого ndarray.Вы также можете проверить df0.dtypes):


>>> # Verify the dtypes are float64, as they were originally
>>> df1.values.dtype
dtype('float64')
>>> df0.values.dtype
dtype('float64')
...