data['column_name'] 与 data.column_name [重复] 之间是不是存在显着差异

Posted

技术标签:

【中文标题】data[\'column_name\'] 与 data.column_name [重复] 之间是不是存在显着差异【英文标题】:Is there a significant difference between data['column_name'] vs data.column_name [duplicate]data['column_name'] 与 data.column_name [重复] 之间是否存在显着差异 【发布时间】:2018-12-22 09:20:45 【问题描述】:

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

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

如果我运行 train['Datetime'].head() 和 train.Datetime.head(),结果是相同的。那么为什么要使用其中一个呢?或者为什么同时使用两者?

【问题讨论】:

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

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

【讨论】:

【参考方案2】:

我都用过。我认为最重要的考虑因素是您希望代码的可持续性和灵活性。对于快速检查和“命令式编程”(如 Jupyter Notebooks),您可以使用最小简写:

train.Datetime.head()

不过很快您就会意识到,当您想要传递可能来自 UI 或其他来源或有效调试代码的变量时,完整的符号如下:

train['Datetime'].head()

有主要好处,在编程时尽早养成习惯是件好事。

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

这听起来可能没什么大不了,但是当您查看 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() 中看到没有硬编码的字符串(红色文本)。这种用户输入和代码的分离是微妙的,但非常重要。

祝你好运!

【讨论】:

以上是关于data['column_name'] 与 data.column_name [重复] 之间是不是存在显着差异的主要内容,如果未能解决你的问题,请参考以下文章

Oracle数据库操作语言(DML)

使用 Spring Data 的 postgres 中的时间戳出错:列 $COLUMN_NAME 是没有时区的时间戳类型,但表达式是 bytea 类型

mysql Out of range value adjusted for column导致Warning(1265)Data truncated for column 'column_nam

oracle数据库操纵语言DML

SQL 创建一个表并插入相关数据

[24]SQL CREATE TABLE 语句