Ошибка памяти панд при преобразовании столбца большого CSV из строки в число с плавающей точкой - PullRequest
1 голос
/ 16 апреля 2019

У меня есть большой CSV (~ 20 мил строк), и я хотел бы преобразовать один столбец из строки в число с плавающей точкой.Я делаю так:

df['sale']=df['sale'].str.replace(",", ".").astype('float32')

и продажа выглядит так:

86,2600
20,2800 
123,5000
30,7500
8,3600

Команда кажется нестабильной, то есть иногда выдает следующую ошибку памяти:

MemoryError Traceback (последний вызов был последним) в () ----> 1 df ['sale'] = df ['sale']. Str.replace (",", "."). Astype ('float32');

Что именно это за ошибка и как ее можно исправить?Спасибо!

1 Ответ

2 голосов
/ 16 апреля 2019

Вместо преобразования после загрузки, которая является интенсивной операцией с памятью.Вы можете указать, что десятичный разделитель соответствует европейскому стилю, передав параметр decimal=',' в read_csv:

pd.read_csv(FILENAME, decimal=',')

Пример:

In[24]:
t="""data
86,2600
20,2800 
123,5000
30,7500
8,3600"""
df = pd.read_csv(io.StringIO(t), decimal=',', sep=';')
df

Out[24]: 
     data
0   86.26
1   20.28
2  123.50
3   30.75
4    8.36

Обратите внимание, чтоЯ передаю sep=';', в противном случае он будет восприниматься как 2 столбца, поскольку разделителем по умолчанию является запятая.

Мы можем видеть, что вывод показывает, что он десятичный, и мы можем подтвердить dtype, используя .info():

df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5 entries, 0 to 4
Data columns (total 1 columns):
data    5 non-null float64
dtypes: float64(1)
memory usage: 120.0 bytes
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...