我目前正在尝试编写一个脚本,该脚本会在特定的一天执行特定的操作。例如,如果今天是6/30/2019,而在我的数据框中有6/30/2019条目,则xyz继续发生。但是,我在比较从数据框到DateTime日期的日期时遇到麻烦。这是我创建数据框的方法
now = datetime.datetime.now()
Test1 = pd.read_excel(r"some path")
这里是我打印数据框时输出的样子。
symbol ... phase
0 MDCO ... Phase 2
1 FTSV ... Phase 1/2
2 NVO ... Phase 2
3 PFE ... PDUFA priority review
4 ATRA ... Phase 1
在这里'event_date'列的打印方式
0 05/18/2019
1 06/30/2019
2 06/30/2019
3 06/11/2019
4 06/29/2019
所以我尝试了其他线程中看到的一些事情。 我尝试过:
if (Test1['event_date'] == now):
print('True')
返回
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我尝试使用以下方法重新格式化数据:
column_A = datetime.strptime(Test1['event_date'], '%m %d %y').date()
返回此
TypeError: strptime() argument 1 must be str, not Series
我已经尝试过了
if any(Test1.loc(Test1['event_date'])) == now:
那又返回了
TypeError: 'Series' objects are mutable, thus they cannot be hashed
我不知道为什么python告诉我str是一个数据框,我假设它与python如何从excel表格中导出数据有关。我不确定该如何解决。
我只是希望python检查是否有任何行与当前日期具有相同的"event_date"
值,并返回索引或返回要在循环中使用的布尔值。
答案 0 :(得分:1)
import datetime
import pandas as pd
da = str(datetime.datetime.now().date())
# converting the column to datetime, you can check the dtype of the column by doing
# df['event_date'].dtypes
df['event_date'] = pd.to_datetime(df['event_date'])
# generate a df with rows where there is a match
df_co = df.loc[df['event_date'] == da]
我建议根据同一列中的匹配项执行xy或一列中需要执行的操作。即
df.loc[df['event_date'] == da,'column name'] = df['x'] + df['y']
比循环更容易。
答案 1 :(得分:0)
import pandas as pd
import time
# keep only y,m,d, and throw out the rest:
now = (time.strftime("%Y/%m/%d"))
# the column in the dataframe needs to be converted to datetime first.
df['event_date'] = pd.to_datetime(df['event_date'])
# to return indices
df[df['event_date']==now].index.values
# if you want to loop, you can do:
for ix, row in df.iterrows():
if row['event_date'] == now:
print(ix)