Доступ к строкам по целым числам и столбцам по меткам Pandas

Мои данные такие:

[Первая строка — заголовки]

Name,Email,Age
Sachith,[email protected],23
Sim,[email protected],234
Yoshi,[email protected],2345
sarla,[email protected],234

Я хотел бы получить доступ к элементам, чтобы строки были указаны как целые числа, а столбцы - по меткам. то есть для Sim я хотел бы получить к нему доступ как [1,'Name'] и так далее

Мой вопрос: следует ли использовать loc или ix?

Глядя на документацию, я не понимаю, что такое индекс панд? Используется ли он для доступа к строкам или столбцам или к обоим? Когда я пытаюсь напечатать индексы этих данных, я получаю массив (4,) dtype=int64 из [0,1,2,3]. Итак, столбцы не являются частью индекса?


person sir_osthara    schedule 26.07.2017    source источник


Ответы (1)


Используйте loc или iloc, поскольку ix – это устарело.

print (df)
      Name             Email   Age
0  Sachith      [email protected]    23
1      Sim      [email protected]   234
2    Yoshi  [email protected]  2345
3    sarla   [email protected]   234

#select by label 1 and label Name    
a = df.loc[1, 'Name']
print (a)
Sim

Но если нужно выбрать индекс по позиции (нужно iloc) и столбцы по меткам (нужно loc) вместе:

df = df.set_index('Email')
print (df)
                     Name   Age
Email                          
[email protected]      Sachith    23
[email protected]          Sim   234
[email protected]    Yoshi  2345
[email protected]     sarla   234

получить метку второго индекса по df.index[1]:

a = df.loc[df.index[1], 'Name']
print (a)
Sim

Или получить позицию метки с помощью get_loc:

a = df.iloc[1, df.columns.get_loc('Name')]
print (a)
Sim
person jezrael    schedule 26.07.2017
comment
Но упоминается, что loc работает только с индексатором на основе меток. Однако разве индексы здесь не целые? Пожалуйста, поправьте меня, если я ошибаюсь. - person sir_osthara; 26.07.2017
comment
Спасибо за подробный ответ. Мне все еще неясна одна вещь. В чем разница между df.loc[1, 'Имя'] и df.loc[df.index[1], 'Имя']? Я не понимаю, как df.loc[1, 'Name'] поскольку 1 является целым числом, а loc принимает только индексацию на основе меток. - person sir_osthara; 26.07.2017
comment
О, кажется, я понял, поправьте меня, если я ошибаюсь. если индекс последовательный и начинается с 0, то метка индекса равна его положению. Итак, df.loc[1,'Name'] на самом деле ищет индекс с меткой 1, и он оказывается в позиции 1. - person sir_osthara; 26.07.2017
comment
Да, точно. Ты прав. Если мой ответ был полезен, не забудьте принять его — нажмите на галочку () рядом с ответом чтобы переключить его с серого на заполненный. Спасибо. - person jezrael; 26.07.2017