繁体   English   中英

在熊猫数据框中修复日期

[英]Fixing dates in pandas dataframe

场景:我正在使用python代码从excel文件中提取数据。 目前,我的代码将每个文件读入单个数据帧,并将它们加入数据帧列表中。

问题:原始的excel源文件是按列(日期)和标识符(行)组织的。 这些文件中的某些文件具有字符串格式的日期,例如20170611或11062015。

到目前为止,我尝试过的工作:从SO的先前研究中,我发现了有关此主题的一些问题和答案,但它们都涉及一次转换,例如:

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

这是我需要的操作,但是我想对循环中受影响文件的所有列标题执行此操作。

问题:可以这样做吗? 如何做呢?

Obs:我考虑过用一些代码遍历excel文件以选择受影响的文件,但是由于我不知道该怎么做,因此我将手动选择文件并分别进行修复。 因此,我的目标只是循环列并修复那些文件的日期。

当前代码可从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))

你可以试试这个 它可以解决几种书写日期的方式,因此可能会解决您的问题。

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

df.rename(columns=rename_cols, axis=1)

您可以使用pandas.to_datetime 它可以合理推断出日期时间格式。 如果后面带有年份的所有格式都首先具有日期(而不是月份),则可以使用dayfirst=True参数

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

我会做这样的事情

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM