前导或尾随空格和pandas value_counts与布尔选择

时间:2015-08-16 21:07:11

标签: python pandas

我正在使用从我县警长局下载的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的第一个问题......我已经研究过这个问题,但尚未找到答案。任何建议将不胜感激。

1 个答案:

答案 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

而且,是的,在这个简单的例子中,领先和尾随的空白确实很重要。但他们不会参与你的社交活动。数据帧???

所以这里仍有一些松散的目标,但希望这是一个很好的开始,可以弄清楚这里发生了什么。