首页 > 解决方案 > Pandas 时间戳对象使用 strftime() 给出错误

问题描述

我在一个 csv 文件中有数据,看起来像这样:

med_intake_time,dose,medicine
09:00,1 pill,aspirin
15:00,2 pills,paracetamol
20:00,1 poll,prozac

我可以运行以下几行而不会出现错误消息:

df = pd.read_csv('file/path/data.csv')
df.med_intake_time = pd.to_datetime(df.med_intake_time)
for idx, row in df.iterrows():
    print(row.med_intake_time.strftime("%H:%M"))

这会按预期打印时间。但是如果我运行以下行

merged =  ', '.join(f"{row.med_intake_time.strftime("%H:%M")} {row.dose} {row.medicine}" for idx, row in df.iterrows()) 

我收到错误消息SyntaxError: invalid syntax。如果我从有问题的行.strftime("%H:%M")中删除代码将被执行。我不明白为什么一次.strftime("%H:%M")执行没有问题,为什么一旦它抛出错误。你知道为什么吗?你有解决办法吗?天呐!

标签: pythonpandasdatetimeformattingtimestamp

解决方案


问题出在您的格式化字符串中:

f"{row.med_intake_time.strftime("%H:%M")} {row.dose} {row.medicine}"

调用中的引号strftime()正在转义您的字符串,因此不确定如何处理它。Python 将其读取为一系列表达式:

f"{row.med_intake_time.strftime("+ %H:%M+")} {row.dose} {row.medicine}"

尝试将其中的双引号更改strftime()为单引号,以便它们不会提前关闭字符串:

f"{row.med_intake_time.strftime('%H:%M')} {row.dose} {row.medicine}"

推荐阅读