我有一個檔案夾,里面有數百個.xlsx檔案,是多年前的日常資料。
檔案名模式是'ABC DEF 20150501.xlsx'
我怎樣才能從所有這些年的每個月的最后一天挑選檔案呢?
遺憾的是,我不知道該怎么做。
我不知道該怎么做。
import pandas as pd
import re
files = [f for f in os.listdir(path) if re.match(r'ABC DEF [0-9] .xlsx'/span>, f) ]
df = pd.DataFrame(files)
df.columns = ['file_name']
df['port_date'] = df['file_name'].apply(lambda x : x. split(' ')[3].split('. ')[0]
我在一列中只得到了日期,而且沒有了主意!
任何幫助都將會使我受益。
如果有任何幫助,我們將不勝感激。
uj5u.com熱心網友回復:
下面的代碼使用了一個函式,在日期上增加了一天,然后將新日期的月份與原日期的月份進行比較,如果它們不同,則原日期為該月的最后一天。
import pandas as pd
from datetime import datetime、timedelta
def last_day(to_date)。
delta = timedelta( days=1)
next_day = to_date delta
if to_date.month != next_day.month。
return True
return False
# 讀取假的檔案名資料
df = pd.read_csv('test.csv')
df['port_date'] = pd.to_datetime(df['file_name'). str[8:16])
df['lastday'] = df['port_date'].apply(lambda dt: last_day(dt) )
uj5u.com熱心網友回復:
如果需要每個月和每年的最后一行提取日期,用GroupBy.last進行排序和按年份和月份分組:
df = pd.DataFrame({'file_name':['ABC DEF 20150501.xlsx',
'ABC DEF 20150701.xlsx'。
'ABC DEF 20150711.xlsx']})
print (df)
檔案名
0 ABC DEF 20150501.xlsx
1 ABC DEF 20150701.xlsx
2 ABC DEF 20150711.xlsx
df['port_date'] = pd.to_datetime(df['file_name']。 str.extract('(d ).', expand=False>)
df = df.sort_values('port_date')
df = (df.groupby([df['port_date'].dt.year, df['port_date'].dt.month] )
.last()
.reset_index(drop=True)
print (df)
file_name port_date
0 ABC DEF 20150501.xlsx 201505-01
1 ABC DEF 20150711.xlsx 201507-11
uj5u.com熱心網友回復:
宣告一個函式:
def contains_date_of_last_day(name)。
Last_days = [
'0131'。
'0228'。
'0331'。
'0430'。
'0531'。
'0630'。
'0731'。
'0831'。
'0930'。
'1031'。
'1130'。
'1231'。
]
for i in last_days。
if i in name: return True
return False
使用該函式檢查是否包含最后一天的日期:
files = [f for f in os.listdir(path) if contains_date_of_last_day(f) ]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/327361.html
標籤:
下一篇:樣式化單選按鈕打破了功能
