我有一个大的 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
添加回答
举报
0/150
提交
取消
