我有一个包含这种类型数据的数据框(列太多):
col1 int64
col2 int64
col3 category
col4 category
col5 category
Run Code Online (Sandbox Code Playgroud)
列似乎是这样的:
Name: col3, dtype: category
Categories (8, object): [B, C, E, G, H, N, S, W]
Run Code Online (Sandbox Code Playgroud)
我想将列中的所有值转换为整数,如下所示:
[1, 2, 3, 4, 5, 6, 7, 8]
Run Code Online (Sandbox Code Playgroud)
我通过这个解决了一个问题:
dataframe['c'] = pandas.Categorical.from_array(dataframe.col3).codes
Run Code Online (Sandbox Code Playgroud)
现在我的数据框中有两列 - 旧的'col3'和新的'c',需要删除旧列.
这是不好的做法.这是工作,但在我的数据框架中有很多列,我不想手动完成.
这个pythonic怎么这么巧妙?
假设我有一个数据框,其国家/地区如下:
cc | temp
US | 37.0
CA | 12.0
US | 35.0
AU | 20.0
Run Code Online (Sandbox Code Playgroud)
我知道有一个pd.get_dummies函数可以将这些国家/地区转换为"单热编码".但是,我希望将它们转换为索引,以便我得到它cc_index = [1,2,1,3].
我假设有一种比使用get_dummies和numpy where子句更快的方法,如下所示:
[np.where(x) for x in df.cc.get_dummies().values]
使用'因子'在R中这样做有点容易,所以我希望大熊猫有类似的东西.
我需要将Pandas数据框中的一列分类变量转换为一个数值,该数值对应于列中唯一分类变量数组的索引(长篇故事!),这里是一个代码片段,它实现了:
import pandas as pd
import numpy as np
d = {'col': ["baked","beans","baked","baked","beans"]}
df = pd.DataFrame(data=d)
uniq_lab = np.unique(df['col'])
for lab in uniq_lab:
df['col'].replace(lab,np.where(uniq_lab == lab)[0][0].astype(float),inplace=True)
Run Code Online (Sandbox Code Playgroud)
它转换数据框:
col
0 baked
1 beans
2 baked
3 baked
4 beans
Run Code Online (Sandbox Code Playgroud)
进入数据框:
col
0 0.0
1 1.0
2 0.0
3 0.0
4 1.0
Run Code Online (Sandbox Code Playgroud)
如预期的.但我的问题是,当我尝试在大数据文件上运行类似的代码时,我的愚蠢的小循环(我想到这一点的唯一方法)就像糖蜜一样慢.我只是好奇是否有人对是否有任何方法更有效地做到这一点有任何想法.提前感谢任何想法.