我有一个较大的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');
此错误究竟是什么,我该如何解决? 谢谢!
答案 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