'pd.date_range()'如何在不调用'DatetimeIndex'类的任何方法的情况下创建'DatetimeIndex'的对象?

How does `pd.date_range()` creates an object of `DatetimeIndex`, without calling any method of the class `DatetimeIndex`?

提问人:IRON MAN 提问时间:9/28/2023 最后编辑:IRON MAN 更新时间:9/28/2023 访问量:51

问:

这是我正在使用的 csv 文件,它以 day 列作为索引

            temperature  windspeed   event
day                                       
2017-01-01         32.0        6.0    Rain
2017-01-04          NaN        9.0   Sunny
2017-01-05         28.0        NaN    Snow
2017-01-06          NaN        7.0     NaN
2017-01-07         32.0        NaN    Rain
2017-01-08          NaN        NaN   Sunny
2017-01-09          NaN        NaN     NaN
2017-01-10         34.0        8.0  Cloudy
2017-01-11         40.0       12.0   Sunny

我正在运行此代码以在包含日期值的日期列中插入缺少的日期值。

dt = pd.date_range("01-01-2017","01-11-2017")
idx = pd.DatetimeIndex(dt)
df = df.reindex(idx)

代码工作正常,但我想了解这个代码片段在幕后是如何工作的,所以我查看了文档,但找不到确切的解释。

然后我问 ChatGPT,它说创建了一个类 DatetimeIndex 的实例。于是我问它,使用函数时调用DatetimeIndex类的哪个方法?pd.date_range()pd.date_range()

它回答说,不直接调用 DatetimeIndex 类的构造函数,但它实现了相同的结果。pd.date_range()

我无法理解这一点。有人可以解释一下吗?

python pandas 日期范围 datetimeindex

评论

1赞 Mark Ransom 9/28/2023
当您依靠 AI 进行理解时,就会发生这种情况。你会得到误解。
0赞 IRON MAN 9/28/2023
你能解释一下吗?@MarkRansom
0赞 Mark Ransom 9/28/2023
你怎么知道ChatGPT告诉你的是真的?你不能。我相信答案是错误的,如果不调用类方法,就无法在 Python 中创建对象。错误的答案会导致误解。__init__

答:

0赞 mozway 9/28/2023 #1

您不需要显式调用 ,pandas.date_range已返回 .DatetimeIndexDatetimeIndex

# ensure index is datetime
df.index = pd.to_datetime(df.index)

dt = pd.date_range("01-01-2017","01-11-2017")
out = df.reindex(dt)

为什么?因为它是为此而编写的:

pandas.date_range pandas.date_range(start=None, end=None, periods=None, freq=None, tz=None, normalize=False, name=None, inclusive='both', *, unit=None, **kwargs)

...

返回: 日期时间索引

输出:

            temperature  windspeed   event
2017-01-01         32.0        6.0    Rain
2017-01-02          NaN        NaN     NaN
2017-01-03          NaN        NaN     NaN
2017-01-04          NaN        9.0   Sunny
2017-01-05         28.0        NaN    Snow
2017-01-06          NaN        7.0     NaN
2017-01-07         32.0        NaN    Rain
2017-01-08          NaN        NaN   Sunny
2017-01-09          NaN        NaN     NaN
2017-01-10         34.0        8.0  Cloudy
2017-01-11         40.0       12.0   Sunny

评论

0赞 IRON MAN 9/28/2023
是的,你是对的。我也是这么想的,但我不确定,因为我是通过观看 YouTube 视频来学习的,他以这种方式编写代码
0赞 mozway 9/28/2023
@IRONMAN 我建议忘记 ChatGPT 来学习如何编码(这非常糟糕,即使它提供了似乎有效的代码)。并始终参考官方的 python/pandas 文档,这些文档写得很好。
0赞 IRON MAN 9/28/2023
谢谢@mozway,我会牢记这一点。我还有一个问题。函数调用哪个方法来创建类的对象。我查看了有关此内容的文档,但找不到。你能解释一下吗?pd.date_range()DatetimeIndex
0赞 mozway 9/28/2023
你检查过来源吗?它直接调用一个方法 ()。但你为什么要问这一切?DatetimeIndex_simple_new