例如,我正在研究这样的示例:
train['Datetime'] = pd.to_datetime(train.Datetime,format='%d-%m-%Y %H:%M')
如果我运行train ['Datetime']。head()和train.Datetime.head(),结果是相同的。那么,为什么要使用一个呢?还是为什么同时使用两者?
答案 0 :(得分:2)
我都用过。我认为最重要的考虑因素是您希望代码的可持续性和灵活性。对于快速检查和“命令式编程”(如Jupyter Notebooks),您可以使用最小速记:
train.Datetime.head()
但是很快您将意识到,当您要传递的变量可能来自UI或其他来源或有效地调试代码时,像这样的完整表示法:
train['Datetime'].head()
具有主要优点,并且在编程时早点养成习惯是个好习惯。
首先,在用于编辑代码的集成开发环境(IDE)中,将突出显示字符串“ Datetime”,以提醒您它是代码中的“硬依赖性”。而Datetime(无引号,只有。)不会显示突出显示。
这听起来似乎没什么大不了,但是当您查看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()中看到没有硬编码的字符串(红色文本)。用户输入和执行操作的代码之间的这种分离是微妙的,但非常重要。
祝你好运!
答案 1 :(得分:1)
当列名包含空格时会出现问题,在这种情况下必须建立索引。