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