gpt4 book ai didi

python - 使用修改后的值更新 python 中的数据框

转载 作者:太空宇宙 更新时间:2023-11-04 03:03:01 24 4
gpt4 key购买 nike

我编写了一个代码来修改日期以减少 2008 年 2 月 29 日的 1 天。代码成功执行并向我显示了输出,但它没有更新数据帧。

Name    Maint Start Date
Yasin 02/29/08
Susy 01/04/15
James 04/14/06

我写了下面的代码,它给了我输出,但没有更新数据框

spend_sw[spend_sw['Maint Start Date'] == '02/29/2008'].apply(lambda x: pd.datetime(x['Maint Start Date'].year , x['Maint Start Date'].month, x['Maint Start Date'].day - 1), axis=1) 

然后我修改为但是所有没有闰年dat的字段都变成空白了。

spend_sw['Maint Start Date'] = spend_sw[spend_sw['Maint Start Date'] == '02/29/2008'].apply(lambda x: pd.datetime(x['Maint Start Date'].year , x['Maint Start Date'].month, x['Maint Start Date'].day - 1), axis=1) 

你能告诉我如何修改现有数据框的值吗?

最佳答案

我认为您可以先转换 Maint Start Date 列中的所有值 to_datetime , 然后过滤 ix并减去由 to_timedelta 创建的 Timedelta 一天:

print (spend_sw)
Name Maint Start Date
0 Yasin 02/29/08
1 Susy 01/04/15
2 James 04/14/06

spend_sw['Maint Start Date'] = pd.to_datetime(spend_sw['Maint Start Date'])

print (spend_sw.ix[spend_sw['Maint Start Date'] == '02/29/08', 'Maint Start Date'])
0 2008-02-29
Name: Maint Start Date, dtype: datetime64[ns]

spend_sw.ix[spend_sw['Maint Start Date'] == '02/29/08', 'Maint Start Date'] = \
spend_sw.ix[spend_sw['Maint Start Date'] == '02/29/08', 'Maint Start Date'] -
pd.to_timedelta(1, unit='d')
print (spend_sw)
Name Maint Start Date
0 Yasin 2008-02-28
1 Susy 2015-01-04
2 James 2006-04-14

另一种解决方案 maskoffset :

spend_sw['Maint Start Date'] = pd.to_datetime(spend_sw['Maint Start Date'])

date = pd.to_datetime('02/29/08')
date1 = date - pd.offsets.Day(1)
#mask by condition
ma = spend_sw['Maint Start Date'] == date
spend_sw['Maint Start Date'] = spend_sw['Maint Start Date'].mask(ma, date1)
print (spend_sw)
Name Maint Start Date
0 Yasin 2008-02-28
1 Susy 2015-01-04
2 James 2006-04-14

关于python - 使用修改后的值更新 python 中的数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40382382/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com