我正在使用从我县警长局下载的csv文件创建的数据框。数据位于here,可以使用read_csv()
读取。数据框包含有关警长报告和采取行动的事件的信息。其中一列是事件发生的城市,我试图创建一个表格和图表,显示我所在地区(Larkfield)随时间推移的事件数量的变化。
当我使用" city"使用panda的value_counts函数时作为输入,我得到了
In [86]: compcounts = soco['city'].value_counts()
In [96]: compcounts[0:10]
Out[96]:
SANTA ROSA 55291
WINDSOR 31711
SONOMA 28840
GUERNEVILLE 9309
BOYES HOT SPRINGS 8006
PETALUMA 6103
EL VERANO 5969
GEYSERVILLE 5822
LARKFIELD 5398
FORESTVILLE 5312
dtype: int64`
我所在地区有5398份报告(' Larkfield')。但是当我尝试为我的区域获取数据帧的子集时,使用
larkfieldcomps = soco[soco['city'] == "LARKFIELD"]
它只返回115个值,而不是5398:
In [94]: larkcounts = larkfieldcomps['year'].value_counts()
In [95]: larkcounts
Out[95]:
2015 114
2013 1
dtype: int64
我想也许问题是,在某些条目中,在#34; LARKFIELD"之前或之后有一个或多个空格。在事件描述中,所以我做了一个搜索/替换以试图去除任何空格,但是当我用" LARKFIELD搜索时,我仍然只得到115个值,"即使我知道该地区还有更多事件发生。
这是我关于Stackoverflow的第一个问题......我已经研究过这个问题,但尚未找到答案。任何建议将不胜感激。
答案 0 :(得分:0)
我可以在下载数据后(使用默认设置读取read_csv
的数据帧)对此进行解释。看来那里有前导或尾随空格。显然value_counts
足够聪明,可以在添加内容时忽略它,但布尔选择更加直观。
>>> soco[soco['city'] == "LARKFIELD"].city.count()
122
>>> soco['city2'] = soco.city.str.strip()
>>> soco[soco['city2'] == "LARKFIELD"].city.count()
5520
当我仔细观察时,似乎5398有11个尾随空格,122个没有空格。这就是区别。 (我不确定为什么你会找到115年的价值而不是122年,但这很可能是由于一年中缺少一些价值,但是你创造了它。)
但后来我这样做是为了仔细检查value_counts
的行为,因为我一直认为前导和尾随空格很重要。
>>> pd.Series( [' foo','foo','foo '] ).value_counts()
foo 1
foo 1
foo 1
而且,是的,在这个简单的例子中,领先和尾随的空白确实很重要。但他们不会参与你的社交活动。数据帧???
所以这里仍有一些松散的目标,但希望这是一个很好的开始,可以弄清楚这里发生了什么。