Python 在pandas中将字符串/数字数据转换为分类格式
我有一个非常大的csv文件,我已经将其转换为熊猫数据帧,其中包含字符串和整型/浮点值。我想将此数据更改为分类格式,以尝试节省一些内存。我的想法基于以下文档: 我的数据框如下所示:Python 在pandas中将字符串/数字数据转换为分类格式,python,pandas,dataframe,categorical-data,Python,Pandas,Dataframe,Categorical Data,我有一个非常大的csv文件,我已经将其转换为熊猫数据帧,其中包含字符串和整型/浮点值。我想将此数据更改为分类格式,以尝试节省一些内存。我的想法基于以下文档: 我的数据框如下所示: clean_data_measurements.head(20) station date prcp tobs 0 USC00519397 1/1/2010 0.08 65 1 USC00519397 1/2/2010 0.
clean_data_measurements.head(20)
station date prcp tobs
0 USC00519397 1/1/2010 0.08 65
1 USC00519397 1/2/2010 0.00 63
2 USC00519397 1/3/2010 0.00 74
3 USC00519397 1/4/2010 0.00 76
5 USC00519397 1/7/2010 0.06 70
6 USC00519397 1/8/2010 0.00 64
7 USC00519397 1/9/2010 0.00 68
8 USC00519397 1/10/2010 0.00 73
9 USC00519397 1/11/2010 0.01 64
10 USC00519397 1/12/2010 0.00 61
11 USC00519397 1/14/2010 0.00 66
12 USC00519397 1/15/2010 0.00 65
13 USC00519397 1/16/2010 0.00 68
14 USC00519397 1/17/2010 0.00 64
15 USC00519397 1/18/2010 0.00 72
16 USC00519397 1/19/2010 0.00 66
17 USC00519397 1/20/2010 0.00 66
18 USC00519397 1/21/2010 0.00 69
19 USC00519397 1/22/2010 0.00 67
20 USC00519397 1/23/2010 0.00 67
这是另外2700行的降水数据。由于其属于同一类别(车站编号),因此应可转换为类别格式,以节省处理时间。我只是不确定如何编写代码。有人能帮忙吗?谢谢。我想我们可以使用
factorize
objectdf=df.select_dtypes(include='object')
df.loc[:,objectdf.columns]=objectdf.apply(lambda x : pd.factorize(x)[0])
df
Out[452]:
station date prcp tobs
0 0 0 0.08 65
1 0 1 0.00 63
2 0 2 0.00 74
3 0 3 0.00 76
5 0 4 0.06 70
6 0 5 0.00 64
7 0 6 0.00 68
8 0 7 0.00 73
9 0 8 0.01 64
10 0 9 0.00 61
11 0 10 0.00 66
12 0 11 0.00 65
13 0 12 0.00 68
14 0 13 0.00 64
15 0 14 0.00 72
16 0 15 0.00 66
17 0 16 0.00 66
18 0 17 0.00 69
19 0 18 0.00 67
20 0 19 0.00 67
你也可以试试这个
for y,x in zip(df.columns,df.dtypes):
if x == 'object':
df[y]=pd.factorize(df[y])[0]
elif x=='int64':
df[y]=df[y].astype(np.int8)
else:
df[y]=df[y].astype(np.float32)
所需的输出是什么?请问,为什么分类格式可以节省处理时间?另外,
clean\u data\u measurements[“station”]=clean\u data\u measurements[“station”]有什么问题吗?astype(“category”)
?感谢ytu提供的代码,这是一个干净的解决方案,它可以工作。一位朋友向我推荐了这个想法,显然,分类数据占用的内存更少,计算速度更快,我引用的文档支持这个想法/分类数据类型在以下情况下很有用:一个只包含几个不同值的字符串变量。将这样的字符串变量转换为分类变量将节省一些内存,请参见此处。/我正在将您的建议合并到我的较大代码中。