在pandas数据框中修复date

场景:我正在使用python代码从excel文件中提取数据。 目前我的代码读取每个文件到一个单一的数据框,并join到数据框的列表中。

问题:原始的Excel源文件按列(date)和标识符(行)组织。 其中一些文件的date格式为string,如20170611或11062015。

我到目前为止的尝试:从以前的研究中,我发现了一些关于这个主题的问题和答案,但是他们都提到了一个转换,例如:

datetime.datetime.strptime('24052010', "%d%m%Y").date() datetime.date(2010, 5, 24) 

这是我需要的操作,但是我想在一个循环中为受影响的文件的所有列标题执行它。

问:是否可以这样做? 如何做呢?

Obs:我想通过一些代码来select那些受影响的代码,但是由于我不知道如何去做,所以我会手工select文件并且单独修改。 所以我的目标只是循环列和修复这些文件的date。

从Excel获取数据的当前代码:

 import pandas as pd import numpy as np import matplotlib.pyplot as plt import glob, os import datetime as dt from datetime import datetime import matplotlib as mpl directory = os.path.join("C:\\","Users\\DGMS\\Desktop\\final 2") list_of_dfs = [] for root,dirs,files in os.walk(directory): for file in files: f = os.path.join(root, file) print(f) list_of_dfs .append(pd.read_excel(f)) 

您可以使用pandas.to_datetime 。 在推断date时间格式时做了一个合理的猜测。 如果所有格式的后一年都有一天(而不是一个月),则可以使用dayfirst=True参数

我也更喜欢os.walk pathlib.Path.glob

我会做这样的事情

 from pathlib import Path start_dir = Path('.') excel_files = start_dir.glob('*/*.xlsx') list_of_dfs = [(filename, pd.read_excel(filename, header=0, dayfirst=True)) for filename in excel_files] for filename, df in list_of_dfs: try: datetimes = pd.to_datetime(df.columns) df.columns = datetimes except ValueError: print('failed to parse column in %s' % filename 

你可以试试这个 它可以解决你的问题,因为它可以解释几种写date的方式。

 columns = df.columns rename_cols = {} for col in columns: rename_cols[col] = parse(col) df.rename(columns=rename_cols, axis=1)