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

问题描述 投票:1回答:1

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

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

和销售看起来像:

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

该命令似乎不稳定,即有时会出现以下内存错误:

MemoryError Traceback(最近一次调用最后一次)in()----> 1 df ['sale'] = df ['sale']。str.replace(“,”,“。”)。astype('float32') ;

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

python pandas memory
1个回答
2
投票

而不是在加载后转换,这是一个内存密集型操作。您可以通过将param 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
© www.soinside.com 2019 - 2024. All rights reserved.