使用python

时间:2017-06-23 13:31:27

标签: python excel pandas

场景:我正在尝试提供一个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)

2 个答案:

答案 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将绝对路径放到文件中。 或者将项目文件夹添加到系统路径(解决方法,不推荐)。