Python 如何导入熊猫中的数字编码列?

Python 如何导入熊猫中的数字编码列?,python,pandas,Python,Pandas,我正在导入一个数据集,该数据集对许多变量进行数字编码,例如: SEX 1 - Male 2 - Female 我对如何转换这些(因此它们在我的数据框中显示为男性和女性而不是数字)的最佳猜测是这样做: df.SEX.replace({1: 'Male', 2: 'Female'}, inplace=True) 是否有更好/更标准的方法来实现这一点(理想情况下,作为我调用pd.read_fwf的一部分或作为多个列的单个函数)——这是一个相当大的文件,我有很多列需要以这种方式重新编码。您可以使用:

我正在导入一个数据集,该数据集对许多变量进行数字编码,例如:

SEX
1 - Male
2 - Female
我对如何转换这些(因此它们在我的数据框中显示为
男性
女性
而不是数字)的最佳猜测是这样做:

df.SEX.replace({1: 'Male', 2: 'Female'}, inplace=True)
是否有更好/更标准的方法来实现这一点(理想情况下,作为我调用pd.read_fwf的一部分或作为多个列的单个函数)——这是一个相当大的文件,我有很多列需要以这种方式重新编码。

您可以使用:

df = pd.DataFrame({"Sex": [1, 2, 1, 1, 2, 1, 2]})
更改数据类型:

df["Sex"] = df["Sex"].astype("category")
print(df["Sex"])
Out[33]: 
0    1
1    2
2    1
3    1
4    2
5    1
6    2
Name: Sex, dtype: category
Categories (2, int64): [1, 2]
重命名类别:

df["Sex"] = df["Sex"].cat.rename_categories(["Male", "Female"])
print(df)
Out[36]: 
      Sex
0    Male
1  Female
2    Male
3    Male
4  Female
5    Male
6  Female
我在约75k的数据集上试用了它(从中选择了评论最多的30种啤酒)

replace
相当慢:

%timeit df["beer_name"].replace(rep_dict)
10 loops, best of 3: 139 ms per loop
map
的速度比预期的快(因为它会查找精确匹配):

更改列的类别所需的时间几乎与
map

%timeit df["beer_name"].astype("category")
100 loops, best of 3: 2.57 ms per loop
但是,更改后,类别重命名要快得多:

df["beer_name"] = df["beer_name"].astype("category")
%timeit df["beer_name"].cat.rename_categories(range(30))
10000 loops, best of 3: 149 µs per loop
因此,第二个
map
所需时间与第一个
map
所需时间相同,但一旦更改类别,
rename\u categories
将更快。遗憾的是,读取文件时无法分配
类别
dtype。之后需要更改类型

从0.19.0版开始,您可以传递
dtype='category'
以读取\u csv(或指定要使用字典解析为类别的列)。()

%timeit df["beer_name"].astype("category")
100 loops, best of 3: 2.57 ms per loop
df["beer_name"] = df["beer_name"].astype("category")
%timeit df["beer_name"].cat.rename_categories(range(30))
10000 loops, best of 3: 149 µs per loop