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查看我的更新答案。你是一个传奇伙伴。非常感谢!