df['CID']
делегирует NDFrame.__getitem__
, и более очевидно, что вы выполняете операцию индексирования.
С другой стороны, df.CID
делегирует NDFrame.__getattr__
, что требует некоторого дополнительного подъема, главным образом для определения того, является ли CID атрибутом, функцией или столбцом, который вы используете. Вы звоните с использованием атрибута доступа (удобно, но не рекомендуется для производственного кода).
Теперь, почему это не рекомендуется? Рассмотрим,
df = pd.DataFrame({'A': [1, 2, 3]})
df.A
0 1
1 2
2 3
Name: A, dtype: int64
Нет проблем, относящихся к столбцу "A" как df.A
, поскольку он не конфликтует с именами атрибутов или функций в пандах. Однако рассмотрим функцию pop
(просто в качестве примера).
df.pop
# <bound method NDFrame.pop of ...>
df.pop
является связанным методом df
. Теперь я хотел бы создать столбец с именем «pop» по разным причинам.
df['pop'] = [4, 5, 6]
df
A pop
0 1 4
1 2 5
2 3 6
Отлично, но,
df.pop
# <bound method NDFrame.pop of ...>
Я не могу использовать обозначение атрибута для доступа к этому столбцу. Однако ...
df['pop']
0 4
1 5
2 6
Name: pop, dtype: int64
Обозначение в скобках все еще работает. Вот почему это лучше.