【问题标题】:Unexpected Behavior with Pandas Datetime/ dt.datePandas Datetime/dt.date 的意外行为
【发布时间】:2018-03-03 10:34:41
【问题描述】:

我在我的代码中发现了一个错误,这是由于我的数据框的日期列不包括小时和分钟,而只包括日期。由于连续运行这两个函数而不是逐个运行它们,我追踪了问题的原因。如果我一个一个地运行函数,没有问题。如果我同时运行它们,我的结果是出乎意料的。

我需要连续运行这些函数,但它们并不相互依赖。我是 Python 新手,所以我认为这可能是由于输入被覆盖或其他原因(据我所知,在 Java 中不会发生这种情况)。所以,我把函数改成如下:

def func1(dataset):
    originalData = dataset
    # only look at one day at a time- remove extra unnecessary info
    originalData ['Date'] = pd.to_datetime(originalData ['Date'])
    print dataset, 'test1'
    originalData ['Date'] = originalData ['Date'].dt.date
    print dataset, 'test2'
    # other stuff

def func2(dataset):
    originalData2 = dataset
    # look at entire datetime
    originalData2['Date'] = pd.to_datetime(originalData2['Date'])
    print originalData2
    # other stuff     

这样跑,我在第二个函数里浪费了时间。

csv = pd.read_csv(csvFileName)
func1(csv)
func2(csv)

像这样运行,func2 得到我想要的输出:

csv = pd.read_csv(csvFileName)
func2(csv)

奇怪的是,如果运行 func1,test1 用 datetime 打印出日期,而 test2 只打印出日期。即使更改应用于 originalDataset,数据集也正在更改。我是不是误会了什么?提前致谢。

【问题讨论】:

    标签: python python-2.7 pandas datetime


    【解决方案1】:

    如果您不想更改基础数据,我建议您在函数中设置数据,如下所示:originalData = dataset.copy(). 此方法提供深层复制,这意味着您只能在其中编辑数据函数,而不是覆盖底层对象。

    奇怪的行为,是的。

    在获取数据帧切片并对它们进行转换时,您也可能会遇到这种情况。

    【讨论】:

    • 解决了!谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 2021-04-16
    • 2014-12-26
    • 1970-01-01
    相关资源
    最近更新 更多