将大csv的列从字符串转换为float时出现pandas内存错误

时间:2019-04-16 08:39:22

标签: python pandas memory

我有一个较大的csv(约2000万行),我想将一列从字符串转换为浮点数。我这样做:

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');

此错误究竟是什么,我该如何解决? 谢谢!

1 个答案:

答案 0 :(得分:2)

而不是在加载后进行转换,这是一种内存密集型操作。您可以通过将参数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