2015-08-16 3 views
1

Я работаю с файловой рамкой, созданной из файла csv, загруженного из отдела шерифа моего округа. Данные расположены here и могут быть считаны с использованием read_csv(). Информационный кадр содержит информацию об инцидентах, о которых сообщается и действует шерифом. Один из столбцов - это город, в котором произошел инцидент, и я пытаюсь создать таблицу и график, показывающий изменение числа инцидентов для моей области (Ларкфилд) со временем.Ведущие или конечные пробелы и pandas value_counts vs boolean selection

Когда я использую функцию 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»). Но когда я пытаюсь получить подмножество dataframe для моей области, используя

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» в описании инцидента, поэтому я сделал поиск/замену, чтобы попытаться вычеркнуть любые пробелы, но я все еще получаю только 115 значений при поиске по «LARKFIELD», хотя я знаю там это еще много инцидентов в этой области.

Это мой первый вопрос о Stackoverflow ... Я исследовал это до смерти, но еще не придумал ответа. Мы ценим любые предложения.

+2

Что делает 'len (larkcounts)' show? у вас могут быть значения «NaN» в ваши годы, которые не учитываются в 'value_counts' – EdChum

+0

Например,' larkfieldcomps ['year']. value_counts (dropna = False) 'дает вам всего 5398? – EdChum

+0

Спасибо Ed, я уже проверил это, и я также просмотрел ядро ​​данных и нашел строки, где «LARKFIELD» было «городом», а дата была чем-то иным, чем 2015 или 2013 год. Я все еще озадачен. – SSShupe

ответ

0

Я могу несколько объяснить это после загрузки данных (и чтения в dataframe с 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' dataframe ???

Таким образом, здесь все еще есть некоторые свободные концы, но, надеюсь, это хорошее начало для выяснения того, что здесь происходит.

+0

Спасибо JohnE. Я думал, что пробелы могут быть проблемой и пытались их вырезать, но, будучи относительно новыми для Python и pandas, я думаю, что, возможно, я не сделал это правильно. Я попробую еще раз и посмотрю, что это изменит ситуацию. – SSShupe

+0

Он сделал трюк! Всем спасибо. – SSShupe

+0

@SSShupe Я рад, что помогает, хотя я все еще не уверен на 100%, что здесь происходит. Еще одна вещь, которую я заметил, это то, что не все в столбце города читается как строка (имеется небольшое количество поплавков). Вы можете изменить свой 'read_csv', чтобы быть явным в dtype. Кстати, я редактировал заголовок, чтобы надеяться сделать его более наглядным в отношении основной проблемы. – JohnE

Смежные вопросы