函数给出了列表,我需要DataFrame,所以我可以连接

时间:2018-01-19 20:08:01

标签: python pandas

我开始拉动文件夹中的所有文件并连接它们,这个文件有效:

warranty_list = []
warranty_files = glob.glob(os.path.join(qms, '*.csv'))
for file_ in warranty_files:
df = pd.read_csv(file_,index_col=None, header=0)
warranty_list.append(df)
warranty = pd.concat(warranty_list)

然后我必须编写一个函数,所以我只抓取某些文件并连接它们,但是这个文件没有用。我没有收到错误,但最后一行没有被使用,所以我没有连接文件。

def get_warranty(years=5):
    warranty_list = [] #list for glob.glob()
    current_year = datetime.datetime.today().year #current year
    last_n_years = [str(current_year-i) for i in range(0,years+1)]
    for year in last_n_years:
        warranty = glob.glob(os.path.join(qms, "Warranty Detail%s.csv" % year)) 
        if warranty:
            for file_ in warranty:
                df = pd.read_csv(file_,index_col=None, header=0)
                warranty_list.append(df)
            warranty_df = pd.concat(warranty_list)

最后一行无法正常工作,因为pd.concat()将列表作为输入,并且它不会对此做任何事情。我不明白为什么它在第一组代码中起作用而不是这一代。

我不知道如何更改函数以获取数据框或如何将最终得到的内容更改为数据框。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我建议直接使用append,因为它与concat

做同样的事情

所以基本上你从空数据框开始

warranty_df = pd.Dataframe()

然后在读取文件时将其他数据框附加到此

因此,您的功能应保持不变,但您需要删除以下行

warranty_df = pd.concat(warranty_list)

循环结束后,您将返回warranty_df!

def get_warranty(years=5):
    warranty_df = pd.Dataframe()
    current_year = datetime.datetime.today().year #current year
    last_n_years = [str(current_year-i) for i in range(0,years+1)]
    for year in last_n_years:
        warranty = glob.glob(os.path.join(qms, "Warranty Detail%s.csv" % year))
        if warranty:
            for file_ in warranty:
                df = pd.read_csv(file_,index_col=None, header=0)
                waranty_df = warranty_df.append(df)

    return warranty_df