如何将 datefinder 输出转换为列表?
How do I turn datefinder output into a list?
所以这里已经回答了这个问题:
不幸的是,我的代表太低了,所以我无法评论以弄清楚为什么它没有按预期运行。我想获取文件名字符串并将它们转换为日期列表,以便我可以将它们用作日期列的填充。所有文件名都包含事件日期,但它们不在表格本身上。
格式为: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"))
我没有获取转换后的对象,而是收到以下错误:
属性错误:
'generator' object has no attribute 'strftime'
当我尝试使用
将其直接转换为列表时
date_list = list(event_dates)
print(event_dates)
我仍然得到输出说它仍然是一个生成器对象:
<generator object <genexpr> at 0x00000230571AE660>
我需要更改什么才能使它真正成为一个日期时间列表,我可以使用它来通过前向填充来填充附加的 'Date' 列?
您的代码不起作用,因为 find_dates
returns 您的生成器和事件日期包含一个生成器列表。它可以与 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 列表,可以根据需要用于我需要构建的远期日期列、索引等。
所以这里已经回答了这个问题:
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"))
我没有获取转换后的对象,而是收到以下错误: 属性错误:
'generator' object has no attribute 'strftime'
当我尝试使用
将其直接转换为列表时date_list = list(event_dates)
print(event_dates)
我仍然得到输出说它仍然是一个生成器对象:
<generator object <genexpr> at 0x00000230571AE660>
我需要更改什么才能使它真正成为一个日期时间列表,我可以使用它来通过前向填充来填充附加的 'Date' 列?
您的代码不起作用,因为 find_dates
returns 您的生成器和事件日期包含一个生成器列表。它可以与 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 列表,可以根据需要用于我需要构建的远期日期列、索引等。