Python pandas可以编译大量数据帧的最快方法

Python pandas可以编译大量数据帧的最快方法,python,pandas,Python,Pandas,目前,我正在使用pandas编译一些数据框架,目前有99本工作簿,包含大约200000行数据和几列数据。本练习将筛选其中一列,并获取所有筛选数据的组合工作簿 最初,我使用一个列表将所有过滤后的数据附加到一个数据帧中,然后在生成的csv中写出一个列表,如下所示: appended_data=[] for fname in os.listdir(readpath): if 'xlsx' in fname: ex_wbk = os.path.join(readpath + fn

目前,我正在使用pandas编译一些数据框架,目前有99本工作簿,包含大约200000行数据和几列数据。本练习将筛选其中一列,并获取所有筛选数据的组合工作簿

最初,我使用一个列表将所有过滤后的数据附加到一个数据帧中,然后在生成的csv中写出一个列表,如下所示:

appended_data=[]
for fname in os.listdir(readpath):
    if 'xlsx' in fname:
        ex_wbk = os.path.join(readpath + fname)
        try:
            fName = os.path.join(readpath + "\\" + fname)
            fBase = os.path.basename(fName)
            df = pd.read_excel(fName, index = False, index_col=None, na_values='')
            df.drop(df.iloc[:, 2:4], inplace = True, axis = 1) 
            df.dropna(subset=['Data Line'], inplace=True)
            appended_data.append(df)
            errorbook = ex_wbk
        except OSError:
            print(str(errorbook) + " Workbook in use")
            pass

appended_data = pd.concat(appended_data, sort=True)
appended_data.to_excel(home, header=False, index=False)
这花了789秒运行


然后,我考虑为每个工作簿制作一个csv文件,其中只包含过滤后的数据,并编译所有这些数据。如下:

for filename in os.listdir(homedir):
    if filename.endswith(".xlsx"):
        fName = os.path.join(homedir + "\\" + filename)
        fBase = os.path.basename(fName)
        fRaw = os.path.splitext(fBase)[0]
        df = pd.read_excel(fName, index = False)
        df.drop(df.iloc[:, 2:4], inplace = True, axis = 1) 
        df.dropna(subset=['Data Line'], inplace=True)
        df.to_csv(path_or_buf=home, header=True, index=False)

all_files = glob.glob(homedir + "/*.csv")
df = pd.concat((pd.read_csv(f) for f in all_files))
os.path.join(path, "*.csv")
df.to_csv ("D:\\Users\\cdoyle\\Desktop\\short\\combined_csv.csv", index=False, encoding='utf-8-sig')
这花了610秒运行


有比上述更快的方法吗?

您有没有编写过代码?没有它,你就不知道从哪里获得最大的好处,也很难做出准确的猜测

不过,我注意到您正在阅读电子表格,并且只有在它加载到内存中之后,才会丢弃几列。如果您已经提前将此任务委托给读者,您可能会得到一些改进:

column_indices_to_preserve = […]
pd.read_excel(…, usecols=column_indices_to_preserve)
这将阻止您对数据进行至少一次额外的传递,这是需要的。它还将减少每个数据结构的内存占用