python - 将日期时间对象与 Pandas 系列元素进行比较

标签 python pandas datetime

我正在尝试将日期时间对象与存储在 Pandas 系列中的日期进行比较。对于 Series 中与传递的日期时间对象匹配的每个元素,该元素都会附加到数组中。需求是一个numpyfloat64。

date_chosen = dt.datetime(2019, 4, 2) 
raw_csv = pd.read_csv(data_series, sep=',', na_values=missing_values)

demand_s = pd.to_numeric(raw_csv['DEMAND'])          # extracts demand
date_series = pd.to_datetime(raw_csv['DATE'])        # extracts date

demand_needed = []                        # which demand values match the date_chosen
day = date_series.dt.day                  # only includes day 
for i in day:
    if day[i] == date_chosen.day:         # if element in day is same as chosen one
        demand_needed.append(demand_s[i]) # append matching element 

print(type(date_chosen.day))              # = int
print(type(day[2]))                       # = numpy.int64

运行正常,但问题是 demand_needed[] 为空。 date_chosen.day 是一个标准的 int,day 的元素是 numpyint64。 如何比较 int 和 numpyint64?

最佳答案

在您的for 循环中,iSeries “day” 中每一行的值,这不是索引。所以你的循环的结构应该更像:

date_chosen = dt.datetime(2019, 4, 2) 
raw_csv = pd.read_csv(data_series, sep=',', na_values=missing_values)

demand_s = pd.to_numeric(raw_csv['DEMAND'])
date_series = pd.to_datetime(raw_csv['DATE'])

demand_needed = []
day = date_series.dt.day
for idx, d in day.iteritems():
    if d == date_chosen.day:
        demand_needed.append(demand_s.iloc[idx])

但更好的解决方案 IIUC 是使用 boolean indexing而不是迭代:

demand_needed = raw_csv.loc[raw_csv.DATE.dt.day.eq(date_chosen.day), 'DEMAND']

或者,如果您需要将输出作为 list 而不是 Series,请使用:

demand_needed = raw_csv.loc[raw_csv.DATE.dt.day.eq(date_chosen.day), 'DEMAND'].tolist()

关于python - 将日期时间对象与 Pandas 系列元素进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55814671/

相关文章:

datetime - 如何找出缩短 URL 的日期

python - 使用Python将时间戳列从列表插入MYSQL

python - scikit-learn 中的 `fit` 函数如何进行验证?

Python数据框: operation per row in all dataframe

python - 根据列中的值重复行 x 次

python - 在 Python Pandas DataFrame 中删除重复项而不删除重复项

mysql - 为上个月的总和引入一个新列

python - 绘制 Pandas 数据时如何禁用标签?

python - 中文字符插入问题

python - 基于相关性使用 Python 对数据进行聚类