Python 3.x 有没有一种优雅的方法可以将panda系列的datetime时间增量转换为格式化字符串?

Python 3.x 有没有一种优雅的方法可以将panda系列的datetime时间增量转换为格式化字符串?,python-3.x,pandas,dataframe,datetime,Python 3.x,Pandas,Dataframe,Datetime,这是我提出的解决方案,但我知道必须有更好的方法来实现这一点。我在处理这些时间差时遇到了相当大的困难 import pandas as pd df["End of Presidency"] = pd.to_datetime(df["End of Presidency"]) df["Start of Presidency"] = pd.to_datetime(df["Start of Presidency"]) df

这是我提出的解决方案,但我知道必须有更好的方法来实现这一点。我在处理这些时间差时遇到了相当大的困难

import pandas as pd

df["End of Presidency"] = pd.to_datetime(df["End of Presidency"])
df["Start of Presidency"] = pd.to_datetime(df["Start of Presidency"])

df["Length of Presidency"] = df["End of Presidency"] - df["Start of Presidency"]
years, days = divmod(df["Length of Presidency"].dt.days,365)

yd = pd.concat([years,days], axis=1)
lamb = lambda row: "{} years, {} days".format(row[0], row[1])
df["Length of Presidency"] = yd.apply(lamb, axis=1)
df
数据帧示例:

df = pd.read_clipboard(sep=',')

#,End of Presidency,Start of Presidency
1,1797-03-04,1789-04-30
2,1801-03-04,1797-03-04
3,1809-03-04,1801-03-04
4,1817-03-04,1809-03-04
5,1825-03-04,1817-03-04

如果您有任何建议,我将非常感谢您的帮助,谢谢。

无需创建
yd
数据框架,只需
apply
总统任期
列上即可

def get_year_和_month(值):
年,日=divmod(value.days,365)
返回“{}年,{}天”。格式(年,天)
df[“总统任期”]=df[“总统任期”]。申请(获得年和月)
或者在一行中使用lambda

df[“总统任期”]=df[“总统任期”].apply(lambda值:{}年,{}天)。格式(*divmod(value.days,365)))
上述内容需要您减去之前的
总统任期结束
总统任期开始
。您可以通过在数据帧上按行应用
来忽略此项:

df[“总统任期”]=df.apply(lambda行:{}年,{}天)。格式(*divmod((行['总统任期结束]]-行['总统任期开始])。天,365),轴=1)
如果您不想在年和日中显示0,可以扩展
get\u year\u和\u month
功能,如:

def get_year_和_month(值):
年,日=divmod(value.days,365)
年份=f'{year}年',如果年份为其他''
day=f'{day}天',如果是另一天''
返回“,”。加入(筛选器(len,[年,日])

漂亮!非常感谢您的深入回答。如果可能的话,您是否知道如何更进一步,在这里添加布尔逻辑?例如,如果天或年=0,则字符串的格式仅为“n年”或“n天”。或者在事后使用另一个函数会更好吗?@ChrisE查看我的更新答案。你是一个传奇伙伴。非常感谢!