使用python从excel工作表中提取和处理数据
场景:我想出来一个Python代码读取给定文件夹中的所有工作簿,获取每个数据,并将其放到一个数据框(每个工作簿成为一个数据框,所以我可以单独操纵它们)。
问题1:使用此代码,即使我正在使用正确的path和文件types,我不断收到错误:
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:我创build不同数据框的原因是每个工作簿都有一个单独的格式(行是我的标识符,列是date)。 我的问题是,这些工作簿中的一些工作表上有一个名为“closures”,或“打开”或没有指定的名称表的数据。 所以我会尝试单独configuration每个dataframe,然后再join它们。
问题3:考虑到dataframe数据已经统一后的最终输出,我的目标是以如下格式输出它们:
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:对于输出,不是所有的date都有相同的标识符数组。
问题1:代码产生这个错误的任何想法? 有没有更好的方法从Excel中提取数据?
问题2:是否可以为每个工作表创build一个唯一的数据框? 这是一个很好的做法吗?
问题3:我可以使用循环来做这种types的输出吗? 这是一个很好的做法吗?
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(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))
或作为jackiebuild议你可以阅读特定工作表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
(当然,你应该指定确切的错误,但不能testingatm)
问题1:如果您使用IDE或Jupyter把绝对path文件。 或者将项目文件夹添加到系统path(解决方法,不build议)。