【问题标题】:How do I know when to use parenthesis when chaining datetime functions in python?在 python 中链接日期时间函数时,我如何知道何时使用括号?
【发布时间】:2021-11-07 17:32:10
【问题描述】:

我正在学习 Python,希望这里有人可以帮助我解决问题。

我有以下代码:

import pandas as pd

ser = pd.Series(['01-01-2010', '02-02-2011', '03-03-2012', '04-04-2013'])
ser_ts = pd.to_datetime(ser)

ser_ts_daynum = ser_ts.dt.weekday.tolist()
ser_ts_dayname = ser_ts.dt.day_name().tolist()

print(ser_ts_daynum)
print(ser_ts_dayname)

为什么在定义ser_ts_dayname 时需要在day_name() 中使用括号,而在ser_ts_daynum 中不需要weekday?如果我尝试相反的方法,我会收到错误。

我觉得我错过了一些关于如何在 Python 中链接函数的内容。我对 R (%>%) 中的管道非常熟悉,但在 Python 中的工作方式似乎不同。非常感谢任何见解!

【问题讨论】:

  • 文档没有回答这个问题吗?您可以在括号中为day_name() 函数 指定可选参数。另一方面,weekday 是一个属性。
  • 没有规则可以很容易地用来确定库中的某个东西是函数还是属性。这主要是一个设计决定,在确定如何使用给定功能时最好查阅文档。

标签: python pandas datetime timestamp parentheses


【解决方案1】:

没有直接的方法知道。以下是一些尝试确定要做什么的提示:

1。检查文档

pandas.Series.dt.day_name 给出了一个用例,带括号,而pandas.Series.dt.weekday 没有括号。

2。检查类型

方法需要括号来执行

>>> type(ser_ts.dt.day_name)
method

这更难以识别属性(不需要括号),因为将返回链接对象的类型:

>>> type(ser_ts.dt.weekday)
pandas.core.series.Series

3。检查签名/文档字符串(交互式解释器)

使用 ipython/jupyter 或任何交互式解释器时,可以在名称末尾添加?(不带括号)

如果是属性,这是对内部对象的引用,则不需要括号。

>>> ser_ts.dt.weekday?
Type:        property
String form: <property object at 0x7fd0234d3770>
Docstring:  
The day of the week with Monday=0, Sunday=6.
...

否则,你有一个签名,这是一个方法,你需要括号。

>>> ser_ts.dt.day_name?
Signature: ser_ts.dt.day_name(*args, **kwargs)
Docstring:
Return the day names of the DateTimeIndex with specified locale.
...

4。试试括号;)

>>> ser_ts.dt.weekday()
TypeError: 'Series' object is not callable

好的,看起来你不需要它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-06
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    相关资源
    最近更新 更多