场景:我正在尝试提供一个python代码,它读取给定文件夹中的所有工作簿,获取每个工作簿的数据并将其放入单个数据框(每个工作簿变为一个数据框,所以我可以单独操作它们。
问题1:使用此代码,即使我使用正确的路径和文件类型,我仍然收到错误:
File "<ipython-input-3-2a450c707fbe>", line 14, in <module>
f = open(file,'r')
FileNotFoundError: [Errno 2] No such file or directory: '(1)Copy of
Preisanfrage_17112016.xlsx'
问题2:我创建不同数据框的原因是每个工作簿都有一个单独的格式(行是我的标识符,列是日期)。我的问题是这些工作簿中的一些工作簿上有一个名为&#34; Closing&#34;或&#34; Opening&#34;或者没有指定名称。因此,我将尝试单独配置每个数据框,然后再加入它们。
问题3:一旦数据框数据已经统一,考虑最终输出,我的目标是以如下格式输出它们:
date 1 identifier 1 value
date 1 identifier 2 value
date 1 identifier 3 value
date 1 identifier 4 value
date 2 identifier 1 value
date 2 identifier 4 value
date 2 identifier 5 value
Obs1:对于输出,并非所有日期都具有相同的标识符数组。
问题1:为什么代码产生此错误的任何想法?有没有更好的方法从excel中提取数据?
问题2:是否可以为每个工作表创建唯一的数据框?这是一个好习惯吗?
问题3:我可以使用循环执行此类输出吗?这是一个好习惯吗?
Obs2:我不知道这是多么相关,但我在使用Python 3.6和Anaconda。
到目前为止代码:
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")
for root,dirs,files in os.walk(directory):
for file in files:
print(file)
f = open(file,'r')
df1 = pd.read_excel(file)
答案 0 :(得分:1)
pd.concat(list_of_dfs)
或某些手动更改。
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))
或使用glob
:
import glob
list_of_dfs = []
for file in glob.iglob(directory + '*.xlsx')
print(file)
list_of_dfs .append(pd.read_excel(file))
或者杰克建议你可以阅读特定的表list_of_dfs.append(pd.concat([pd.read_excel(file, 'Opening'), pd.read_excel(file, 'Closing')]))
。如果您只有其中任何一个可用,您甚至可以更改为
try:
list_of_dfs.append(pd.concat([pd.read_excel(file, 'Opening'))
except:
pass
try:
list_of_dfs.append(pd.concat([pd.read_excel(file, 'Closing'))
except:
pass
(当然,您应该指定确切的错误,但不能测试该atm)
答案 1 :(得分:0)
问题1:如果您使用IDE或Jupyter将绝对路径放到文件中。 或者将项目文件夹添加到系统路径(解决方法,不推荐)。