Pandas减去日期后的天数

rn0zuynd  于 2022-12-02  发布在  其他
关注(0)|答案(2)|浏览(148)

我试图通过从“Harvest_date”中减去60天来创建一个新列“Starting_time”,但每次都得到相同的日期。有人能指出我做错了什么吗?
| 收获日期|
| - -|
| 二十一月十二日|
| 二十一年一月十二日|
| 二十一年三月十日|

import pandas as pd
from datetime import timedelta

df1 = pd.read_csv (r'C:\Flower_weight.csv')

def subtract_days_from_date(date, days):

    subtracted_date = pd.to_datetime(date) - timedelta(days=days)
    subtracted_date = subtracted_date.strftime("%Y-%m-%d")

    return subtracted_date

df1['Harvest_date'] = pd.to_datetime(df1.Harvest_date)
df1.style.format({"Harvest_date": lambda t: t.strftime("%Y-%m-%d")})

for harvest_date in df1['Harvest_date']:
    df1["Starting_date"]=subtract_days_from_date(harvest_date,60)

print(df1["Starting_date"])

| 开始日期(_D)|
| - -|
| 2021年10月5日|
| 2021年10月5日|
| 2021年10月5日|

omvjsjqw

omvjsjqw1#

我不确定这里是否需要使用循环。也许可以尝试以下方法:

df1_dates['Starting_date'] = df1_dates['Harvest_date'].apply(lambda x: pd.to_datetime(x) - timedelta(days=60))
df1_dates['Starting_date'].dt.strftime("%Y-%m-%d")
df1_dates['Starting_date']
o8x7eapl

o8x7eapl2#

在最后一个循环的每次迭代中覆盖序列

for harvest_date in df1['Harvest_date']:
    df1["Starting_date"]=subtract_days_from_date(harvest_date,60)

可以通过对subtract_days_from_date函数进行矢量化来消除循环。

np.vectorize的名字

import numpy as np

subtract_days_from_date = np.vectorize(subtract_days_from_date)

df1["Starting_date"]=subtract_days_from_date(df1["Harvest_date"], 60)

enumerate的名称

for idx, harvest_date in enumerate(df1['Harvest_date']):
    df1.iloc[idx][ "Starting_date"]=subtract_days_from_date(harvest_date,60)

相关问题