Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在输出文件中使用日期作为索引_Python_Excel_Python 3.x_Pandas - Fatal编程技术网

Python 在输出文件中使用日期作为索引

Python 在输出文件中使用日期作为索引,python,excel,python-3.x,pandas,Python,Excel,Python 3.x,Pandas,我有几个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, head

我有几个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文件的所有文件分配给文件名。我在datadrame中定义了filename,使用正则表达式从filename中获取日期并将其分配给变量k。现在,我连接该文件以获得输出csv文件。但代码不知何故给出了一个错误:TypeError:expected string或bytes like object。谁能帮我一下我做错了什么。

稍微修改一下

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)

如果
k
是用文件名提取的日期列表,则使用
concatenated\u df=pd.concat(df,keys=k)
尽力理解以下内容。1.文件名不是字符串,而是列表。2.
df
是一个生成器,而不是列表。3.当您应该传递列表或字符串时,您正在传递一个正则表达式匹配器对象。。。你知不知道python?我的数据包含字符串、浮点数和整数,我想可能有问题,任何关于错误的建议!不。如果我们看到一些数据,你告诉我们你想用这段代码实现什么。glob应该是一个带通配符的字符串。见帖子