将函数应用于数据框;时间戳.dt

par*_*val 5 python pandas

最终,我想计算从每个日期到该月最后一天的天数df['start'],并用结果填充该'count'列。

作为实现该目标的第一步,该calendar.monthrange 方法采用(年、月)参数并返回(第一个工作日、天数)元组。

将函数应用于数据框或系列对象似乎存在一个普遍错误。我想了解为什么这不起作用。

import numpy as np
import pandas as pd
import calendar

def last_day(row):
    return calendar.monthrange(row['start'].dt.year, row['start'].dt.month)
Run Code Online (Sandbox Code Playgroud)

此行引发 AttributeError:“Timestamp 对象没有属性 'dt'”:

df['count'] = df.apply(last_day, axis=1)
Run Code Online (Sandbox Code Playgroud)

这就是我的数据框的样子:

       start  count
0 2016-02-15    NaN
1 2016-02-20    NaN
2 2016-04-23    NaN

df.dtypes

start    datetime64[ns]
count           float64
dtype: object
Run Code Online (Sandbox Code Playgroud)

Ste*_*uch 10

去除.dt。访问某种向量时通常需要这样做。但是当访问单个元素时,它已经是一个datetime对象了:

代码:

def last_day(row):
    return calendar.monthrange(row['start'].year, row['start'].month)
Run Code Online (Sandbox Code Playgroud)

为什么:

apply调用last_day并传递了一个 Series。

df['count'] = df.apply(last_day, axis=1)
Run Code Online (Sandbox Code Playgroud)

然后last_day选择该系列中的单个元素:

row['start'].year
Run Code Online (Sandbox Code Playgroud)