gpt4 book ai didi

python - 根据 Pandas 中的字符串列获取日期

转载 作者:太空宇宙 更新时间:2023-11-04 09:39:02 25 4
gpt4 key购买 nike

我有一个 Pandas 数据框:

id       age
001 1 hour
002 2 hours
003 2 days
004 4 days

年龄是指项目在数据库中的时间。我喜欢做的是在将项目添加到数据库时打印日期。

因此,如果 age 列包含字符串“hour”或“hours”,我想打印当前日期,如果没有,则将当前日期减去天数。

所需的输出应如下所示:

id       age          insertion_date
001 1 hour 2018-09-18
002 2 hours 2018-09-18
003 2 days 2018-09-16
004 4 days 2018-09-14

我正在使用 Python 2.7,到目前为止,这是我所取得的成就。

import pandas as pd
from datetime import date

for index, row in df.iterrows():
age = row["age"]
if "days" in age:
# Remove days and convert data type of age column
df["age"] = df["age"].astype("str").str.replace('[^\d\.]', '')
# deduct current date by number of days
df["insertion_date"] = df["age"].astype("int64").apply(lambda x: date.today() - timedelta(x))
else:
# print current date
df["insertion_date"] = date.today()

上面代码的输出如下所示:

id       age          insertion_date
001 1 2018-09-17
002 2 2018-09-16
003 2 2018-09-16
004 4 2018-09-14

此代码的问题在于,即使 age 列中存在字符串“hour”或“hours”,它也不会将当前日期添加到 insertion_date 列。

如果有人能指出我在这段代码中出错的地方,我将不胜感激,这样我就可以修复它以获得所需的输出,即如果字符串“hour”,它会将当前日期添加到 insertion_date 列或 age 列中存在“hours”,否则,将当前日期减去 age 列中的天数,并将日期添加到 insertion_date 列。

最佳答案

您可以使用 Timestamp.floor减去由 to_timedelta 创建的 timedeltaTimedeltaIndex.floor :

df['new'] = pd.Timestamp.today().floor('D') - pd.to_timedelta(df['age']).dt.floor('D')
print (df)
id age new
0 1 1 hour 2018-09-18
1 2 2 hours 2018-09-18
2 3 2 days 2018-09-16
3 4 4 days 2018-09-14

print (df['new'].dtypes)
datetime64[ns]

关于python - 根据 Pandas 中的字符串列获取日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52381763/

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