为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

呼如林 2022-01-11 16:56:16
我有一个大的 csv(约 20 百万行),我想将一列从字符串转换为浮点数。我这样做:df['sale']=df['sale'].str.replace(",", ".").astype('float32')和销售看起来像:86,260020,2800 123,500030,75008,3600该命令似乎不稳定,即有时会出现以下内存错误:MemoryError Traceback (last last call last) in () ----> 1 df['sale']=df['sale'].str.replace(",", ".").astype('float32') ;这个错误到底是什么,我该如何解决?谢谢!
查看完整描述

1 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

而不是在加载后进行转换,这是一个内存密集型操作。您可以指定小数点分隔符是欧式风格通过传递帕拉姆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


查看完整回答
反对 回复 2022-01-11
  • 1 回答
  • 0 关注
  • 198 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号