接上篇:笨办法学分析[01]数据导入
我们导入了对学生群体的网购行为调研数据,今天来对数据进行简单的操作和替换。
01.访问员编号数据重构(替换为名称)
我们查看数据可以观察到,问卷中的所有答案都是用代号替代的,我们可以使用pandas中的各种函数达成我们的统计目的,但是统计出的分类并不利于我们识别。因此将这些代号替换成人类易于识别的文字是必要的(咦,我们为什么要用代号呢?在传统的数据分析中人工使用代号作分类、录入等非常高效有用,但用于计算机生成的数据时,似乎分类代号反而给我们带来了枷锁)。
那么拿访问员编号开刀吧。
首先,我们来统计一下访问员有哪几位。
#对访问员进行统计
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