场景:我试图想出一个 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:我创建不同数据框的原因是每个工作簿都有单独的格式(行是我的标识符,列是日期)。我的问题是其中一些工作簿在名为“Closing”或“Opening”的工作表上有数据,或者未指定名称。因此,我将尝试单独配置每个数据框,然后将它们加入。
问题 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:我不知道这有多相关,但我在 Anaconda 中使用 Python 3.6。
到目前为止的代码:
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)
认为你不需要你的开放。我会将它们存储在一个列表中。您可以使用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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句