2017-06-01 110 views
1

我用熊猫(Python 2.7版),使用到评估调查(部分)下面的代码:创建/重命名分类与熊猫

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 

首先阅读该.csv

df = pd.read_csv("data_project_638595_2017_05_23.csv", sep=';',usecols=range(6,82) + range(92,112)) 

重命名列(这是一个例子):

df.rename(columns={"v_27" : "age"}, inplace=True) 

集的数据类型对于所有实施例(这是一个例子):

df["age"] = df["age"].astype("category") 

年龄也被要求在参与调查的cateogries参与者。因此,年龄看起来现在这个样子,其中2.0 =“20-29岁”:

df.age 

     age 
... 
333 2.0 
336 2.0 
338 2.0 
Name: age, dtype: category 
Categories (5, float64): [1.0, 2.0, 3.0, 4.0, 5.0] 

,其计这样的:

df.age.value_counts() 

2.0 178 
3.0  29 
5.0  3 
4.0  2 
1.0  2 
Name: age, dtype: int64 

我现在想要做的是建立和重命名以下类别(这也意味着,提出“60 +”具有0计数和分类也应订购):

['0-19', '20-29', '30-39', '40-49', '50-59', '60+'] 

我试过几种方法(如rename_categories),但我只是无法得到它应该像它应该那样工作。

什么是可行的解决方案?提前致谢!

回答

0

pd.cut使用方法:

df['new'] = pd.cut(df.age, 
        bins=[0, 19, 29, 39, 49, 59, 999], 
        labels=['0-19', '20-29', '30-39', '40-49', '50-59', '60+'], 
        include_lowest=True) 

演示:

In [103]: df = pd.DataFrame(np.random.randint(100, size=(10)), columns=['age']) 

In [104]: df 
Out[104]: 
    age 
0 10 
1 64 
2 84 
3 14 
4 4 
5 31 
6 98 
7 22 
8 49 
9 50 

In [105]: df['new'] = pd.cut(df.age, 
    ...:     bins=[0, 19, 29, 39, 49, 59, 999], 
    ...:     labels=['0-19', '20-29', '30-39', '40-49', '50-59', '60+'], 
    ...:     include_lowest=True) 

In [106]: df 
Out[106]: 
    age new 
0 10 0-19 
1 64 60+ 
2 84 60+ 
3 14 0-19 
4 4 0-19 
5 31 30-39 
6 98 60+ 
7 22 20-29 
8 49 40-49 
9 50 50-59 

UPDATE:

映射:

In [20]: d 
Out[20]: {0: '0-19', 1: '20-29', 2: '30-39', 3: '40-49', 4: '50-59', 5: '60+'} 

来源DF:

In [21]: df 
Out[21]: 
    age 
0 0 
1 3 
2 2 
3 3 
4 4 
5 2 
6 0 
7 3 
8 2 
9 4 

映射年龄:

In [22]: df.age.map(d) 
Out[22]: 
0  0-19 
1 40-49 
2 30-39 
3 40-49 
4 50-59 
5 30-39 
6  0-19 
7 40-49 
8 30-39 
9 50-59 
Name: age, dtype: object 
+0

我刚刚意识到我的介绍可能是一个有点混乱。这将工作,如果我将年龄作为一个整数。其实年龄已经在熊猫式的规范中。我编辑了我的问题。 – cian

+0

@cian,我已更新我的文章 - 请检查 – MaxU

+0

真棒,工作完美!谢谢! – cian