./test.csv
如下:
price datetime
1 100 2019-10-10
2 150 2019-11-10
...
import pandas as pd
import datetime as date
import datetime as time
from datetime import datetime
from datetime import timedelta
csv_df = pd.read_csv('./test.csv')
today = datetime.today()
csv_df['datetime'] = csv_df['expiration_date'].apply(lambda x: pd.to_datetime(x)) #convert `expiration_date` to datetime Series
def days_until_exp(expiration_date, today):
diff = (expiration_date - today)
return [diff]
csv_df['days_until_expiration'] = csv_df['datetime'].apply(lambda x: days_until_exp(csv_df['datetime'], today))
我试图遍历DateFrame中标记为csv_df['datetime']
的特定列,该列在每个单元格中只有一个值,一个日期,并执行由diff
定义的计算。
然后,我希望将单个值diff
放入新的系列csv_df['days_until_expiration']
中。
问题是,它正在计算每一行(673行)的值,并将所有这些值放在csv_df['days_until_expiration
每行的列表中。我意识到这可能是由于[diff]
周围的括号引起的,但是如果没有它们,我会出错。
在Excel中,我将执行= SUM(datetime-price)之类的操作,然后单击并向下拖动行以使其填充新列。但是,我想在Pandas中执行此操作,因为它是更大应用程序的一部分。
答案 0 :(得分:0)
csv_df['datetime']
是序列,因此x
中的apply
是序列的每个单元格。您用apply
和lambda
呼叫days_until_exp()
,但没有将x
传递给它。因此,结果是错误的。
无论如何,如果没有样本数据,我想您想在sum
中找到csv_df['datetime']
-today()。为此,您不需要apply
。只需对序列和sum
进行直接矢量化操作即可。
我为示例制作2列数据框:
csv_df:
datetime days_until_expiration
0 2019-09-01 NaN
1 2019-09-02 NaN
2 2019-09-03 NaN
执行以下csv_df['datetime']
和today()
之间的增量差序列。我猜你想要这个:
td = datetime.datetime.today()
csv_df['days_until_expiration'] = (csv_df['datetime'] - td).dt.days
csv_df:
datetime days_until_expiration
0 2019-09-01 115
1 2019-09-02 116
2 2019-09-03 117
或:
查找所有增量中的sum
并将相同的sum
值分配给csv_df['days_until_expiration']
csv_df['days_until_expiration'] = (csv_df['datetime'] - td).dt.days.sum()
csv_df:
datetime days_until_expiration
0 2019-09-01 348
1 2019-09-02 348
2 2019-09-03 348