[英]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.