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

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


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

和销售看起来像:


86,2600

20,2800 

123,5000

30,7500

8,3600

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


MemoryError Traceback (last last call last) in () ----> 1 df['sale']=df['sale'].str.replace(",", ".").astype('float32') ;


这个错误到底是什么,我该如何解决?谢谢!


呼如林
浏览 199回答 1
1回答

qq_笑_17

而不是在加载后进行转换,这是一个内存密集型操作。您可以指定小数点分隔符是欧式风格通过传递帕拉姆decimal=','到read_csv:pd.read_csv(FILENAME, decimal=',')例子:In[24]:t="""data86,260020,2800&nbsp;123,500030,75008,3600"""df = pd.read_csv(io.StringIO(t), decimal=',', sep=';')dfOut[24]:&nbsp;&nbsp; &nbsp; &nbsp;data0&nbsp; &nbsp;86.261&nbsp; &nbsp;20.282&nbsp; 123.503&nbsp; &nbsp;30.754&nbsp; &nbsp; 8.36请注意,我会通过,sep=';'否则它将把上面的内容视为 2 列,因为默认分隔符是逗号。我们可以看到输出显示它是十进制的,我们可以确认dtype使用.info():df.info()<class 'pandas.core.frame.DataFrame'>RangeIndex: 5 entries, 0 to 4Data columns (total 1 columns):data&nbsp; &nbsp; 5 non-null float64dtypes: float64(1)memory usage: 120.0 bytes
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python