在输出fi中使用日期作为索引

2024-10-03 21:34:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有几个excel文件,它们的文件名因日期不同而不同。我必须将所有这些文件与它们的文件名日期作为索引列连接起来。我编写了以下代码:

path = r"C:\\Users\\atcs\\Desktop\\data science\\files\\1-Danny Jones KPI's\\Source\\"                     
fileName =  glob.glob(os.path.join(path, "*.xlsx"))
df = (pd.read_excel(f, header=None, sheetname = "YTD Summary_4") for f in fileName)
k = (re.search("([0-9]{1,2}\-[0-9]{1,2}\-[0-9]{4})", fileName))
concatenated_df   = pd.concat(df, index=k)
concatenated_df.to_csv('tableau7.csv')

我在这里所做的是首先定义一个目录,然后将包含xlsx文件的所有文件分配给filename。我在datadrame中定义了文件名,使用正则表达式从文件名中获取日期并将其赋给变量k。现在我连接文件以获得输出csv文件。但是代码以某种方式给出了一个错误:TypeError:expected string或bytes like object。有人能帮我做错事吗。你知道吗


Tags: 文件csvpath代码df定义文件名filename
2条回答

一点点的改变

path = r"C:\\Users\\atcs\\Desktop\\data science\\files\\1-Danny Jones KPI's\\Source\\*.xlsx"                     
fileName =  glob.glob(path)
l = []
for f in fileName:
    df = pd.read_excel(f, header=None, sheetname = "YTD Summary_4")
    df['date'] = f
    l.append(df)
concatenated_df   = pd.concat(l).set_index('date')
concatenated_df.to_csv('tableau7.csv')

您可以使用:

#simplify for add *.xlsx to path
path = r"C:\\Users\\atcs\\Desktop\\data science\\files\\1-Danny Jones KPI's\\Source\\*.xlsx"
fileName =  glob.glob(path)
#create list of DataFrames dfs
dfs = [pd.read_excel(f, header=None, sheetname = "YTD Summary_4") for f in fileName]
#add parameter keys for filenames, remove second level of multiindex
concatenated_df = pd.concat(dfs, keys=fileName).reset_index(level=1, drop=True)
#extract dates and convert to DatetimeIndex
pat = '([0-9]{1,2}\-[0-9]{1,2}\-[0-9]{4})'
concatenated_df.index = pd.to_datetime(concatenated_df.index.str.extract(pat, expand=False))
print (concatenated_df)

相关问题 更多 >