У меня есть датафрейм для панд:
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", текущая дата не добавляется в inserttion_date колонка.
Был бы признателен, если бы кто-то мог указать, где я ошибся с этим кодом, чтобы я мог исправить его, чтобы получить желаемый результат, т.е. он добавит текущую дату в столбец inserttion_date , если строка "час" или «часы» присутствует в столбце age , в противном случае вычтите текущую дату из числа дней в столбце age и добавьте дату к inserttion_date колонка.