笨办法学分析[02]索引与数据重构

接上篇:笨办法学分析[01]数据导入
我们导入了对学生群体的网购行为调研数据,今天来对数据进行简单的操作和替换。

01.访问员编号数据重构(替换为名称)

我们查看数据可以观察到,问卷中的所有答案都是用代号替代的,我们可以使用pandas中的各种函数达成我们的统计目的,但是统计出的分类并不利于我们识别。因此将这些代号替换成人类易于识别的文字是必要的(咦,我们为什么要用代号呢?在传统的数据分析中人工使用代号作分类、录入等非常高效有用,但用于计算机生成的数据时,似乎分类代号反而给我们带来了枷锁)。

《笨办法学分析[02]索引与数据重构》 前5行数据

那么拿访问员编号开刀吧。
首先,我们来统计一下访问员有哪几位。

#对访问员进行统计
int_data['访问员编号'].groupby(int_data['访问员编号']).count()
#int_data['访问员编号']:是只将访问员编号列输出出来,作为统计数据。
#groupby(int_data['访问员编号']):是表示使用访问员编号列进行分类统计。
#count():统计方法为计数,也可以是sum()、mean()等等常用函数。

#下面是Python的输入输出结果
In [40]: int_data['访问员编号'].groupby(int_data['访问员编号']).count()
Out[40]: 
访问员编号
1    50
2    25
3    25
4    25
dtype: int64

可以看得出来,访问员一共4位,其中访问员1完成了50份问卷。2/3/4三个访问员分别完成了25份问卷。
下一步,我们我们用replace方法将原始数据中的访问员编号换成访问员名称,假设四位访问员分别为:赵一、钱二、孙三、李四。

#替换值
int_data['访问员编号'].replace(1, '赵一')
#可以传入一个替换列表,进行批量替换
int_data['访问员编号'].replace([1, 2, 3, 4],['赵一', '钱二', '孙三', '李四'])

#以下是输入输出结果
int_data['访问员编号'].replace([1, 2, 3, 4],['赵一', '钱二', '孙三', '李四'])
Out[43]: 
问卷编号
1      赵一
2      赵一
3      赵一
4      赵一
5      赵一
      ···
120    赵一
121    赵一
122    赵一
123    赵一
124    赵一
125    赵一
Name: 访问员编号, dtype: object

不过这里有个问题,使用replace方法替换值并不改变原数据。我们将改变后的数据重新赋值给int_data或者单独列出“访问员编号数据”:

#单独列出访问员姓名数据
Surveyor=int_data['访问员编号'].replace([1, 2, 3, 4],['赵一', '钱二', '孙三', '李四'])
Surveyor.groupby(Surveyor).count()

#以下是输入输出结果:
Surveyor=int_data['访问员编号'].replace([1, 2, 3, 4],['赵一', '钱二', '孙三', '李四'])
Surveyor.groupby(Surveyor).count()
Out[48]: 
访问员编号
孙三    25
李四    25
赵一    50
钱二    25
dtype: int64

这样我们就完成了数据的替换工作。
如果要更改原始数据,只需要:

int_data['访问员编号']=int_data['访问员编号'].replace([1, 2, 3, 4],['赵一', '钱二', '孙三', '李四'])
02.索引重构

附加一个:实际上像“访问员编号”、“学校”、“性别”之类的字段,是中文字符,想把它替换为英文的。
很简单,使用rename方法可以解决。

#重命名列名称,以字典形式传入
int_data.rename(columns={'访问员编号':'Surveyor',
                         '学校':'University',
                         '性别':'Sex'})

#以下是输出结果(只截取了部分数据,注意对比列标题columns)
In [53]: int_data.rename(columns={'访问员编号':'Surveyor',
                         '学校':'University',
                         '性别':'Sex'})
Out[53]: 
      Surveyor University Sex  3    4    5  5.1  5.2  5.3  5.4 ... 13.3 13.4  \
问卷编号                                                           ...             
1            1          C   B  B  NaN  NaN  NaN  NaN  NaN  NaN ...  NaN  NaN   
2            1          C   B  A    A    A    B    C    D    E ...  NaN  NaN   
3            1          C   B  A    B    A  NaN  NaN  NaN  NaN ...  NaN  NaN   
4            1          C   B  A    A    A    B    C  NaN  NaN ...  NaN  NaN   
5            1          C   B  A    A    A  NaN  NaN    D    E ...  NaN  NaN   

当然,重命名索引列的名称是可以这样的:

#重命名索引列的名称(问卷编号改成“Qsnber”)
In[57]:int_data.index.names=['Qsnber']
In[58]:int_data
Out[58]: 
        访问员编号 学校 性别  3    4    5  5.1  5.2  5.3  5.4 ... 13.3 13.4   14 14.1  \
Qsnber                                               ...                       
1           1  C  B  B  NaN  NaN  NaN  NaN  NaN  NaN ...  NaN  NaN    A    B   
2           1  C  B  A    A    A    B    C    D    E ...  NaN  NaN    A    B   
3           1  C  B  A    B    A  NaN  NaN  NaN  NaN ...  NaN  NaN    A    B   
4           1  C  B  A    A    A    B    C  NaN  NaN ...  NaN  NaN    A    B   
5           1  C  B  A    A    A  NaN  NaN    D    E ...  NaN  NaN    A    B     
    原文作者:3230
    原文地址: https://www.jianshu.com/p/cf4b74bf6e8b
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞