Замена / Выбор значений в столбцах с помощью loc. Панды - PullRequest
0 голосов
/ 04 января 2019

Я использую функцию индексации на основе меток loc для поиска всех меток, где значение объекта "UN" в списке столбцов, т.е. это список "columns", но в этом фрагменте кода, как только loc не находит "UN" в первом индексе, после этого останавливается, распечатывая только первый индекс.

columns=["median","age","capital"]  # this is the list of columns

recent_grads - мой DataFrame.

for column in columns:
    recent_grads.loc[0:172 == 'UN',column]

Это 'median' столбец

recent_grads["median"]

0        NaN
1      75000
2      73000
3      70000
4      65000
5      65000
6         UN
7      62000
8      60000
9      60000
10     60000
11     60000
12     60000
13     60000
14     58000
15     57100
16     57000
17     56000
18     54000
19     54000
20     53000
21     53000
22     52000
23     52000
24     51000
25     50000
26     50000
27     50000
28     50000
29     50000
       ...  
143    32000
144    32000
145    31500
146    31000
147    31000
148    31000
149    30500
150    30000
151    30000
152    30000
153    30000
154    30000
155    30000
156    30000
157    30000
158    29000
159    29000
160    29000
161    29000
162    28000
163    28000
164    28000
165    27500
166    27000
167    27000
168    26000
169    25000
170    25000
171    23400
172    22000
Name: median, Length: 173, dtype: object

А что касается вывода моего кода:

recent_grads.loc[0:172 == 'UN',"median"]

output:

0    NaN
Name: median, dtype: object

При выборе некоторого случайного начального индекса

recent_grads.loc[3:172 == ['UN'],"median"]

выходной отличается:

Series([], Name: median, dtype: object)

Ответы [ 2 ]

0 голосов
/ 04 января 2019

, если вы хотите метки 'UN':

использование:

list_of_index=list(recent_grads[recent_grads['median'].str.contains('UN',na=False)].index)

или:

list_of_index = list(recent_grads.loc[recent_grads['median']=='UN'].index)

где:

recent_grads.loc[recent_grads['median']=='UN'] 

находит строки, содержащие UN

0 голосов
/ 04 января 2019

Я думаю, вам нужно искать 'UN' в столбце для первых 172 записей, если это так:

# returns a dataframe
df.head(172).filter(df[column] == 'UN')

Документы: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.filter.html#pandas.DataFrame.filter

Обновление:

Если вы хотите использовать loc, просто:

df.head(172).loc[df[column] == 'UN']

В отношении принятого ответа это не преобразует dataframe в список, который создаетновый объект, и, возможно, может потреблять больше памяти, особенно когда ваши данные большие.Таким образом, этот собственный метод Dataframe более эффективен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...