簡體   English   中英

如何將日期查找器輸出轉換為列表?

[英]How do I turn datefinder output into a list?

因此,這里已回答了這個問題: 將datefinder的輸出放入列表不幸的是,我的代表太低了,所以我無法發表評論以澄清為什么它不能按預期運行。 我想將文件名字符串轉換為日期列表,以便隨后將其用作日期列的填充。 所有文件名都包含事件日期,但它們本身不在工作表上。 格式為:CompanyNameEventLocationDDMMYYYY.xlsx

import glob
import datefinder
#get all Excel files within folder
path = r"C:\Users\me\Documents\Events\Spreadsheets\Consolidated\*.xlsx"
filename = glob.glob(path)
#get dates from filenames
event_dates = (datefinder.find_dates(f) for f in filename)
#check output
for days in event_dates:
    print(days.strftime("%Y-%m-%d %H:%M:%S"))

沒有得到轉換的對象,而是得到以下錯誤:AttributeError:

'generator' object has no attribute 'strftime'

當我嘗試將其直接轉換為列表時

date_list = list(event_dates)
print(event_dates)

我仍然得到輸出說它仍然是一個生成器對象:

<generator object <genexpr> at 0x00000230571AE660>

我需要更改什么,以便它實際上成為日期時間列表,可用於通過向前填充來填充附加的“日期”列?

您的代碼無效,因為find_dates返回給您一個生成器,並且事件日期包含一個生成器列表。 它可以與chain.from_iterable一起使用,如下所示

import glob
import datefinder
from itertools import chain
#get all Excel files within folder
path = r"C:\Users\me\Documents\Events\Spreadsheets\Consolidated\*.xlsx"
filename = glob.glob(path)
#get dates from filenames
event_dates = (datefinder.find_dates(f) for f in filename)
#check output
for days in chain.from_iterable(event_dates):
    print(days.strftime("%Y-%m-%d %H:%M:%S"))

但是我嘗試在具有您格式的文件名上使用日期查找器,但效果不佳。 我認為這不是為此目的而設計的。

event_dates = datefinder.find_dates('afilename_01-08-2019.xls')
for match in event_dates:
    print(match)
event_dates = datefinder.find_dates('afilename01082019.xls')
for match in event_dates:
    print(match)

此先前的代碼顯示:

2019-01-08 00:00:00

如果您的格式始終為CompanyNameEventLocationDDMMYYYY.xlsx ,則應解析日,月和年的數字,並將其分配給date對象:

import datetime
import glob
#get all Excel files within folder
path = r"C:\Users\me\Documents\Events\Spreadsheets\Consolidated\*.xlsx"
filenames = glob.glob(path)

for filename in filenames:
    full_date = filename.split('.')[0]
    day, month, year = full_date[-8:-6], full_date[-6:-4], full_date[-4:]
    real_date = datetime.date(int(year), int(month), int(day))
    print(real_date)

最終通過進行以下更改使它起作用:

import pandas as pd
import glob
import datefinder
from datetime import datetime
#get all Excel files within folder
path = r"C:\Users\me\Documents\Events\Spreadsheets\Consolidated\*.xlsx"
filename = glob.glob(path)
#get dates from filenames and convert to datetime objects
event_dates = (datefinder.find_dates(f) for f in filename)
event_dates_dto = []
for dates in event_dates:
    event_dates_dto.append(pd.to_datetime(list(dates)))
#check output
print(event_dates_dto)

現在,這將創建一個從每個文件名中提取的DateTimeIndexes列表,該列表可根據需要用於我需要構造的遠期日期列,用於建立索引等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM