pandas - cookbook 第三章 哪个区的噪音投诉最多?(或者,选择数据多样性)
以下内容翻译自 https://github.com/jvns/pandas-cookbook
complaints = pd.read_csv('../data/311-service-requests.csv')
我们继续纽约311投诉服务请求的例子。
3.1 只选择噪音投诉
想要知道那个区有最多的噪音投诉,首先,我们得看看数据长啥样。
complaints[:5]
为了获得噪音投诉,我们需要找到"投诉类型"所在得行,该行得列是"噪音-街道/人行道",我会展示如何实现它,而且会解释为何如此。
noise_complaints = complaints[complaints['Complaint Type'] == "Noise - Street/Sidewalk"]
noise_complaints[:3]
如你看 noise_complaints, 你将看到是有效得。它只包含了正确得投诉类型。但是它为什么会这样?我们来将它拆分成两部分。
complaints['Complaint Type'] == "Noise - Street/Sidewalk"
这是一个大数组,包含了好多 True 和 False,每行都再我们得数据帧中,当我们用这个数组索引数据帧,我们得到了行是数组评估为True的行。这点特别重要,通过布尔数组来过滤数据帧,而且数据帧索引,必须与数据帧有相同的长度。
你同样可以将多个条件用 & 操作符连接,如下所示:
is_noise = complaints['Complaint Type'] == "Noise - Street/Sidewalk"
in_brooklyn = complaints['Borough'] == "BROOKLYN"
complaints[is_noise & in_brooklyn][:5]
或者我们只需要一部分列:
complaints[is_noise & in_brooklyn][['Complaint Type', 'Borough', 'Created Date', 'Descriptor']][:10]
3.2 numpy arrays 回归
在pandas内部,列的类型是 pd.Series,pandas Series 内部是 numpy arrays, 如果你添加 .values 到任何 Series 之后,你将的到内部的 numpy array.
3.3 哪个区有更多的噪音投诉?
is_noise = complaints['Complaint Type'] == "Noise - Street/Sidewalk"
noise_complaints = complaints[is_noise]
(noise_complaints['Borough'].value_counts())
是曼哈顿!但是如果我们将数量除以总数,这样数据就会更加敏感,这是很容易操作的。
noise_complaint_counts = noise_complaints['Borough'].value_counts()
complaint_counts = complaints['Borough'].value_counts()
noise_complaint_counts / complaint_counts