在以下两种情况下:
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 许可协议
在以下两种情况下:
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 许可协议
只要您访问具有简单名称的单个列,它们就相同,但您可以使用括号表示法做更多的事情。您只能使用 df.col
如果列名是有效的 Python 标识符(例如,不包含空格和其他类似内容)。此外,如果您的列名称与 pandas 方法名称冲突(如 sum
),您可能会遇到意外。使用方括号,您可以选择多个列(例如 df[['col1', 'col2']]
)或添加一个新列( df['newcol'] = ...
),这是点访问无法完成的。
您链接到的另一个问题适用,但这是一个更普遍的问题。 Python 对象开始定义 .
和 []
运算符如何应用于它们。对于这种访问单列的有限情况,Pandas DataFrames 选择使它们相同,并带有上述警告。
原文由 BrenBarn 发布,翻译遵循 CC BY-SA 3.0 许可协议
2 回答5.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
“点表示法”,即
df.col2
是为了方便而公开的 属性访问。df['col2']
做同样的事情:它返回列的pd.Series
。关于属性访问的一些注意事项:
df.new_col = x
不起作用,更糟的是:它实际上会 默默地 创建一个新属性而不是列 - 在这里考虑猴子修补)