Могу ли я использовать DataFrame.to_csv и pandas.read_csv для последовательной записи и чтения типа float? - PullRequest
0 голосов
/ 01 ноября 2019

Я хотел бы записать значения с плавающей точкой в ​​файл CSV с помощью DataFrame.to_csv и убедиться, что при чтении его с помощью pandas.read_csv я получу точно такое же значение в памяти. Текстовое представление не должно иметь смысла для человека, который читает.

Существуют ли общие текстовые представления значений типа Python? Или надежный способ десериализации и сериализации float в текст?

float_format не гарантирует надежность чтения-записи

1 Ответ

0 голосов
/ 01 ноября 2019

Да и нет. Если ваши float в формате float64, то это не имеет значения;это тип поплавка по умолчанию для панд. Если вы сохраняете любой другой тип с плавающей точкой (например, float32 или float16), вы рискуете потерять его, если не знаете его заранее и можете передать его в read_csv.

df = pd.DataFrame(np.random.randn(5, 2), dtype=np.float16)
df.to_csv('data.csv', index=False)

pd.read_csv('data.csv').dtypes
0    float64  # this should be float16, right?
1    float64
dtype: object

pd.read_csv('data.csv', dtype=pd.np.float16).dtypes # need dtype=... here
0    float16
1    float16
dtype: object

OTOH, сбор данных является гораздо лучшим вариантом, если вы хотите сохранить данные, он также более компактен и должен быть немного быстрее (не рассчитанным по времени).

df.to_pickle('data.pkl')

pd.read_pickle('data.pkl').dtypes
0    float16
1    float16
dtype: object
...