Pandas 数据[';列名称';]与数据列名称之间是否存在显著差异

Pandas 数据[';列名称';]与数据列名称之间是否存在显著差异,pandas,data-science,data-analysis,Pandas,Data Science,Data Analysis,例如,我正在研究这样一个例子: train['Datetime'] = pd.to_datetime(train.Datetime,format='%d-%m-%Y %H:%M') train['Datetime'].head() 如果我运行train['Datetime'].head()和train.Datetime.head(),结果是相同的。那么为什么要用一个来代替另一个呢?或者为什么两者都用 当列名包含空格时会出现问题,在这种情况下,必须进行索引。我已经使用了这两种方法。我认为最重

例如,我正在研究这样一个例子:

train['Datetime'] = pd.to_datetime(train.Datetime,format='%d-%m-%Y %H:%M') 
train['Datetime'].head()

如果我运行train['Datetime'].head()和train.Datetime.head(),结果是相同的。那么为什么要用一个来代替另一个呢?或者为什么两者都用

当列名包含空格时会出现问题,在这种情况下,必须进行索引。

我已经使用了这两种方法。我认为最重要的考虑因素是您希望代码具有多大的可持续性和灵活性。对于快速检查和“命令式编程”(如Jupyter笔记本),您可以使用最简单的速记:

train.Datetime.head()
然而,很快您就会意识到,当您想要高效地传递可能来自UI或其他源代码或调试代码的变量时,完整的符号如下:

train['Datetime'] = pd.to_datetime(train.Datetime,format='%d-%m-%Y %H:%M') 
train['Datetime'].head()
有主要的好处,在编程的早期养成习惯是很好的

首先,在用于编辑代码的集成开发环境(IDE)中,字符串“Datetime”将突出显示,以提醒您它是代码中的“硬依赖项”。而Datetime(没有引号,只有a.)不会显示突出显示

这听起来可能没什么大不了的,但当您查看100行(或更多行)代码时,查看哪里有“硬编码”的变量名是很重要的

[]表示法的另一个主要优点是可以将字符串变量传递给表示法

import pandas as pd
import numpy as np

# make some data
n=100
df = pd.DataFrame({
    'Fruit': np.random.choice(['Apple', 'Orange', 'Grape'], n),
    'Animal': np.random.choice(['Cat', 'Dog', 'Fish'], n),
    'x1': np.random.randn(n)})

# some name from a user interface.  It could be "Fruit" or "Animal"
group = "Animal"

# use that string variable in an expression (in this case,  as a group by)
df.groupby(group).agg(['count', 'mean', 'std'])
在这里,即使在堆栈溢出中,也可以看到df.groupby()中没有硬编码字符串(红色文本)。这种用户输入和代码的分离是微妙的,但极其重要


祝你好运

使用点表示法是一种快捷方式,比使用['']表示法更不可靠。如果列标题带有空格或特殊字符,则点表示法将不起作用。例如,如果您有一个带有“日期时间”列的数据框,则不能使用
df.Date-Time.head()
您必须使用
df['Date-Time'].head()
。感谢您的回复。出于某种原因,我很难用谷歌搜索这个。然而,使用点符号有一些优点,一个是在一些开发环境中,比如Jupyter笔记本。使用点表示法可以帮助代码助手弹出数据帧列上可以调用的所有可用方法。至少在Jupyter笔记本中,当使用['']符号时,这是不可用的。第二个可能是可读性,如果你正在使用点符号框架编程语言。我在jupyter笔记本上看到了这一点,所以也许这就是他们使用点符号的原因。通过“代码助手”,我猜这是我必须在jupyter上安装的东西?如果您有一行覆盖了任何内置的方法/属性等,例如
索引
。。。你必须使用字典符号