首页 > 解决方案 > 如何创建一个仅包含数据框名称的列表作为元素用作其他函数调用的输入

问题描述

我正在尝试连接多个具有相似文件名的 csv 文件。我想这样做的方法是编写一个函数并使用 for 循环运行该函数。

我写的函数:

def GetEach(LastBit):
    FilePath = r'file:///Path\FLAG_' + LastBit + '.csv'
    df = pd.read_csv(FilePath)
    df = df[['CRN', 'ALCOHOL_RELATED', 'CELL_PHONE', 'DRINKING_DRIVER', 'DRUG_RELATED',
       'ILLEGAL_DRUG_RELATED', 'DRUGGED_DRIVER',
       'IMPAIRED_DRIVER' ]]
    return df 

然后我写的for循环如下所示。代码的原因是 csv 文件的文件名几乎相同,除了不同的年份。

for i in range(2, 8):
    MyInput = '201' + str(i) + '_Northampton'
    r.append(GetEach(MyInput)) 

我最终想要获得的是类似的东西WhatIWant = [GetEach(2012), GetEach(2013)...],然后我就可以跑去pd.concat(WhatIWant )获得我想要的东西。但显然我的代码会使数据框在列表中完全解开r

我该如何修复我的代码?还是有更好的方法来做到这一点?

谢谢。

标签: pythonpandasfunctionfor-loop

解决方案


这是读取 csv、将数据帧附加到列表然后将它们连接到 1 个大数据帧的好方法。

您的代码示例并不完整。你的代码看起来像这样吗?

import pandas as pd

def GetEach(LastBit):
    FilePath = r'file:///Path\FLAG_' + LastBit + '.csv'
    df = pd.read_csv(FilePath)
    df = df[['CRN', 'ALCOHOL_RELATED', 'CELL_PHONE', 'DRINKING_DRIVER', 'DRUG_RELATED', 'ILLEGAL_DRUG_RELATED', 'DRUGGED_DRIVER','IMPAIRED_DRIVER' ]]
    return df 

r = [] # Start with an empty list!

for i in range(2, 8):
    MyInput = '201' + str(i) + '_Northampton'
    r.append(GetEach(MyInput)) 

df_complete = pd.concat(r)

如果是这样,您是否检查过各个 df 是否正确?


推荐阅读