使用pandas循环遍历.xlsx文件,只执行第一个文件

时间:2015-09-28 20:41:35

标签: python pandas python-3.4

我的最终目标是将包含.xlsx文件的文件夹的内容合并到一个大文件中。

我认为下面的代码就足够了,但它只执行第一个文件,我无法弄清楚为什么它会停在那里。文件很小(~6 KB),所以不应该等待。如果我打印f_list,它会显示完整的文件列表。那么,我哪里错了? 要清楚,没有返回错误,它只是不执行整个for循环。我觉得应该有一个简单的修复,但是对Python和编码不熟悉,我遇到了麻烦看到它。

我在Windows 8上使用Anaconda进行此操作。

import pandas as pd
import glob
f_list = glob.glob("C:\\Users\\me\\dt\\xx\\*.xlsx")  # creates my file list
all_data = pd.DataFrame()             # creates my DataFrame

for f in f_list:                      # basic for loop to go through file list but doesn't
    df = pd.read_excel(f)             # reads .xlsx file
    all_data = all_data.append(df)    # appends file contents to DataFrame
all_data.to_excel("output.xlsx")      # creates new .xlsx

使用新信息进行修改:

在尝试了一些建议的更改之后,我注意到输出声称文件是空的,除了其中一个略大于其他文件。如果我将它们放入DataFrame,它声称DataFrame为空。如果我把它放入dict,它声称没有相关的值。这可能与文件大小有关吗?这些文件中有许多(如果不是大多数)有3-5行,每列5列。它看到的那一行有12行。

1 个答案:

答案 0 :(得分:1)

我强烈建议将DataFrames读入dict:

sheets = {f: pd.read_excel(f) for f in f_list}

首先,非常易于调试:只需检查REPL中的dict。

另一个原因是你可以在一次传递中有效地将它们连接成一个DataFrame:

pd.concat(sheets.values())

注意:这比append快得多,后者必须在每次追加调用时分配一个临时DataFrame。

另一个问题是你的glob可能没有拿起所有文件,你应该通过打印f_list来检查它。