Python 将大csv列从字符串转换为浮点时出现内存错误

Python 将大csv列从字符串转换为浮点时出现内存错误,python,pandas,memory,Python,Pandas,Memory,我有一个大的csv(~20 mil行),我想将一列从字符串转换为浮点。我这样做: df['sale']=df['sale'].str.replace(",", ".").astype('float32') 销售情况如下: 86,2600 20,2800 123,5000 30,7500 8,3600 该命令似乎不稳定,即有时会出现以下内存错误: MemoryError回溯(上次最近调用) 在() ---->1 df['sale']=df['sale'].str.replace(“,”,“)

我有一个大的csv(~20 mil行),我想将一列从字符串转换为浮点。我这样做:

df['sale']=df['sale'].str.replace(",", ".").astype('float32')
销售情况如下:

86,2600
20,2800 
123,5000
30,7500
8,3600
该命令似乎不稳定,即有时会出现以下内存错误:

MemoryError回溯(上次最近调用) 在() ---->1 df['sale']=df['sale'].str.replace(“,”,“).astype('float32”)

这个错误到底是什么?我如何修复它?
谢谢大家!

而不是在加载后进行转换,这是一项内存密集型操作。通过将参数
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=';'否则它将把上面的两列视为默认分隔符为逗号

我们可以看到输出显示为十进制,我们可以使用
.info()
确认
dtype

df.info()
范围索引:5个条目,0到4
数据列(共1列):
数据5非空浮点64
数据类型:float64(1)
内存使用:120.0字节

该列有多大?请告诉pandas在读取时将其视为十进制分隔符
pd.read_csv(FILENAME,decimal=',')
,以便将其转换为reading@EdChum这似乎就是诀窍!谢谢如果它能工作,请让我知道,我会作为回答发帖也许numpy在记忆方面更有效?将numpy导入为np df['sale']=np.core.defchararray.replace(df['sale'].values',',',',')).astype('float32'))
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
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