繁体   English   中英

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

[英]Leading or trailing whitespace and pandas value_counts vs boolean selection

我正在使用从县治安官部门下载的csv文件创建的数据框。 数据位于此处 ,可以使用read_csv()读取。 数据框包含有关向警长报告并采取行动的事件的信息。 其中一列是发生事件的城市,我试图创建一个表格和图表来显示我所在地区(黑田)的事件数随时间的变化。

当我使用以“ city”作为输入的熊猫的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`

我所在地区('Larkfield')共有5398个报告。 但是当我尝试获取我所在区域的数据框的子集时,使用

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

我认为问题可能出在某些条目中,事件描述中“ LARKFIELD”之前或之后存在一个或多个空格,因此我进行了搜索/替换以尝试去除任何空格,但是当即使我知道该地区还有更多事件,也可以通过“ LARKFIELD”进行搜索。

这是我关于Stackoverflow的第一个问题...我已经对此进行了研究,但是还没有得出答案。 任何建议,将不胜感激。

我可以在下载数据(并使用默认设置使用read_csv读入数据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

是的,在这个简单的示例中,前导空格和尾随空格确实很重要。 但是它们不在您的“ soco”数据框中???

因此,这里仍然有一些松散的结局,但希望这是弄清这里正在发生的事情的一个好的开始。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM