循环虽然excel文件做了一些事情并将它们保存到新文件夹python pandas

时间:2016-06-26 18:11:24

标签: python for-loop pandas append export-to-excel

我遇到了for循环问题。 我不知道发生了什么,这曾经工作过,但现在它告诉我“没有连接的对象”。

我想完成两件事。 我想遍历文件夹中的所有excel文件。对于每个excel文件,我想删除2行标题数据(下面的代码已经执行)。

然后我想将每个编辑过的文件及其原始文件名保存在新文件夹中。但是,保存一个新文件,其中每个编辑文件的所有数据都附加在一起。

我以为我的追加是正确的,但由于某种原因它不再起作用了。

import os
import pandas as pd
import numpy as np

from pandas import Series, DataFrame

appended_data = []

path = 'C:\Test\TestRawFile'
for fn in os.listdir(path):
    if os.path.isfile(fn):
        # Import the excel file and call it xlsx_file
        xlsx_file = pd.ExcelFile(fn)
        # View the excel files sheet names
        xlsx_file.sheet_names
        # Load the xlsx files Data sheet as a dataframe
        df = xlsx_file.parse('Sheet1',header= None)
        df_NoHeader = df[2:]
        data = df_NoHeader
        appended_data.append(data)
appended_data = pd.concat(appended_data)

这是我目前得到的错误。

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-46-962ccf280c0b> in <module>()
     11         data = df_NoHeader
     12         appended_data.append(data)
---> 13 appended_data = pd.concat(appended_data)

C:\Anaconda2\lib\site-packages\pandas\tools\merge.pyc in concat(objs, axis, join, join_axes, ignore_index, keys, levels, names, verify_integrity, copy)
    832                        keys=keys, levels=levels, names=names,
    833                        verify_integrity=verify_integrity,
--> 834                        copy=copy)
    835     return op.get_result()
    836 

C:\Anaconda2\lib\site-packages\pandas\tools\merge.pyc in __init__(self, objs, axis, join, join_axes, keys, levels, names, ignore_index, verify_integrity, copy)
    865 
    866         if len(objs) == 0:
--> 867             raise ValueError('No objects to concatenate')
    868 
    869         if keys is None:

ValueError: No objects to concatenate

2 个答案:

答案 0 :(得分:3)

最有可能的原因是脚本之前工作而不是现在是因为此代码使用相对路径而将其位置从Excel文件的文件夹中移除。尝试使用绝对路径将文件夹路径名称连接到文件名。考虑使用os.path.join()甚至可以帮助保存到新文件夹:

dfList = []
path = 'C:\\Test\\TestRawFile' 
newpath = 'C:\\Path\\To\\New\\Folder'

for fn in os.listdir(path): 
  # Absolute file path
  file = os.path.join(path, fn)
  if os.path.isfile(file): 
    # Import the excel file and call it xlsx_file 
    xlsx_file = pd.ExcelFile(file) 
    # View the excel files sheet names 
    xlsx_file.sheet_names 
    # Load the xlsx files Data sheet as a dataframe 
    df = xlsx_file.parse('Sheet1',header= None) 
    df_NoHeader = df[2:] 
    data = df_NoHeader 
    # Save individual dataframe
    data.to_excel(os.path.join(newpath, fn))

    dfList.append(data) 

appended_data = pd.concat(dfList)
appended_data.to_excel(os.path.join(newpath, 'master_data.xlsx'))

答案 1 :(得分:1)

IIUC你可以这样做:

import os
import glob
import pandas as pd

fmask = '/path/to/excel_files_dir/*.xls*'
target_dir = '/path/to/'
target_fname = '/path/to/result.xlsx'

dfs = []
for f in glob.glob(fmask):
    df = pd.read_excel(f, header=None, skiprows=2)
    df.to_excel(os.path.join(target_dir, os.path.basename(f)),
                index=False)
    dfs.append(df)

# save concatenated
pd.concat(dfs, ignore_index=True).to_excel(target_fname, index=False)