用python从excel工作表中提取和操作数据
场景:我正在尝试编写一个python代码,该代码读取给定文件夹中的所有工作簿,获取每个工作簿的数据并将其放在单个数据帧中(每个工作簿都成为一个数据帧,因此我可以单独操作它们) Issue1:使用此代码,即使我使用了正确的路径和文件类型,我仍然会收到错误:用python从excel工作表中提取和操作数据,python,excel,pandas,Python,Excel,Pandas,场景:我正在尝试编写一个python代码,该代码读取给定文件夹中的所有工作簿,获取每个工作簿的数据并将其放在单个数据帧中(每个工作簿都成为一个数据帧,因此我可以单独操作它们) Issue1:使用此代码,即使我使用了正确的路径和文件类型,我仍然会收到错误: File "<ipython-input-3-2a450c707fbe>", line 14, in <module> f = open(file,'r') FileNotFoundError: [Errno 2] N
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'
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)
认为你不需要你的开放。我会将它们存储在一个列表中。您可以使用
pd.concat(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))
或者正如jackie建议的那样,您可以阅读特定的工作表dfs.append(pd.concat([pd.read\u excel(文件“打开”),pd.read\u excel(文件“关闭”))
。如果您只有其中一个可用,您甚至可以更改为
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:如果您使用IDE或Jupyter,请将绝对路径放入文件。
或者将项目文件夹添加到系统路径(解决方法,不推荐)。好主意,我刚刚尝试过,但也会产生相同的错误。我已经更改了目录名和文件名,但结果是一样的。您使用的是Jupyter笔记本,而不仅仅是Anaconda控制台吗?您需要使用整个文件路径,而不是文件名,因为Anaconda只查看其当前目录。此外,如果要指定正在读取的工作簿的工作表,和/或要合并所有工作表,可以执行dfs.append(pd.concat([pd.read\u excel(文件,'Opening')、pd.read\u excel(文件,'Closing'))的
list\u操作
@jack6e我正在使用spyder控制台。@Roelant第二部分工作得很好,但接下来,如果我从工作表“关闭”(一些工作簿)中有一些数据,从工作表“打开”(其他工作簿)中有一些数据,而有些工作簿既有也有,有些没有,在“阅读过程”中有什么方法吗把这些具体地结合起来?(我的意思是,开门见山,闭门见山等等)。
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