使用方括号访问 Pandas 列与使用点(如属性)

新手上路,请多包涵

在以下两种情况下:

 import pandas

d = {'col1': 2, 'col2': 2.5}
df = pandas.DataFrame(data=d, index=[0])

print(df['col2'])
print(df.col2)

这两种方法都可以用于对列进行索引并产生相同的结果,那么它们之间有什么区别吗?

原文由 Alberto Segundo 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 855
2 个回答

“点表示法”,即 df.col2 是为了方便而公开的 属性访问

您可以直接作为属性访问 Series 上的索引、DataFrame 上的列和 Panel 上的项目:

df['col2'] 做同样的事情:它返回列的 pd.Series

关于属性访问的一些注意事项:

  • 您不能添加列( df.new_col = x 不起作用,更糟的是:它实际上会 默默地 创建一个新属性而不是列 - 在这里考虑猴子修补)
  • 如果列名中有空格或者列名是整数,它将不起作用。

原文由 Julien Marrec 发布,翻译遵循 CC BY-SA 4.0 许可协议

只要您访问具有简单名称的单个列,它们就相同,但您可以使用括号表示法做更多的事情。您只能使用 df.col 如果列名是有效的 Python 标识符(例如,不包含空格和其他类似内容)。此外,如果您的列名称与 pandas 方法名称冲突(如 sum ),您可能会遇到意外。使用方括号,您可以选择多个列(例如 df[['col1', 'col2']] )或添加一个新列( df['newcol'] = ... ),这是点访问无法完成的。

您链接到的另一个问题适用,但这是一个更普遍的问题。 Python 对象开始定义 .[] 运算符如何应用于它们。对于这种访问单列的有限情况,Pandas DataFrames 选择使它们相同,并带有上述警告。

原文由 BrenBarn 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题