Python 将大csv列从字符串转换为浮点时出现内存错误
我有一个大的csv(~20 mil行),我想将一列从字符串转换为浮点。我这样做: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(“,”,“)
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