我有以下代码:
date_today = datetime.datetime.today()
date_today = date_today.strftime('%d-%m-%Y')
df = df[['Email','First Name', 'Last Name', 'Newsletter and Caution', 'Interest','Last Contacted','Relationship']]
df['Last Contacted'] = pd.to_datetime(df['Last Contacted'], format='%Y.%m.%d %H:%M:%S')
df['Last Contacted'] = df['Last Contacted'].dt.strftime('%d-%m-%Y')
df['Last Contacted'] = df['Last Contacted'].apply(pd.Timestamp)
df['Days since contact'] = (date_today - df['Last Contacted']).dt.days
我正在尝试通过从今天的日期中减去最后一次联系的列来添加一列,其中包含自上次联系以来的天数。
但是我遇到以下错误:
TypeError: unsupported operand type(s) for -: 'DatetimeArray' and 'str'
该代码在Jupyter中完美运行,但在Terminal中无法正常运行。
可能是什么问题?
答案 0 :(得分:2)
在第二行:
date_today = date_today.strftime('%d-%m-%Y')
您将日期时间转换为字符串。
strftime
表示时间上的字符串。
这就是为什么当您尝试将日期时间与该行中的字符串进行比较时出现错误的原因:
df['Days since contact'] = (date_today - df['Last Contacted']).dt.days
答案 1 :(得分:2)
这是罪魁祸首:
date_today = date_today.strftime('%d-%m-%Y')
这足以将date_today
转换为字符串。
您想要的是:
date_today = pd.Timestamp(datetime.date.today())
df = df[['Email','First Name', 'Last Name', 'Newsletter and Caution', 'Interest','Last Contacted','Relationship']]
df['Last Contacted'] = pd.to_datetime(df['Last Contacted'], format='%Y.%m.%d %H:%M:%S')
df['Last Contacted'] = df['Last Contacted'].dt.floor('D')
df['Days since contact'] = (date_today - df['Last Contacted']).dt.days
尽可能避免将日期时间转换为字符串以删除部分。在大熊猫上,floor
用于不超过一天的时间,to_period
用于较长的时间。
答案 2 :(得分:0)
仅考虑使用pandas
import pandas as pd
df = pd.DataFrame({"LastContacted":pd.date_range(start='2019-01-01', freq="6H", periods=20)})
df["DaysSinceLast"] = (pd.datetime.today() - df["LastContacted"]).dt.days