我想从多个CSV文件中创建多个DF。在本例中,我有3个CSV文件,我想循环遍历每个文件并为每个文件创建一个新的DF。每个文件名都附加一个数字1 - 3。我希望每个DF都附加一个相应的1 - 3。这将在未来有所不同。
我用我想要的DF名称创建了一个字典,但是当我试图从文件中创建DF时,我的代码最终将DF加载到字典中,而不是为我创建单独的DF。
我是这么试的:
district = 'districtname'
if (district == 'districtname'):
# setup df names in a dictionary
dfs = {} # create a dictionary
i = 1
while i <= 3:
dfs[i] = "dfdistrictname" + str(i)
i = i + 1
print(dfs)
# create the DFs
n = 1
while n <= 3:
filename = 'oppdetail_oppview_' + year + '_' + district + str(n) + '.csv'
print(filename)
print(dfs[n])
dfs[n] = pd.read_csv(filename)
n = n + 1
所有的输出都是我所期望的,只是这一行:
dfs[n] = pd.read_csv(filename).
在字典结构内部创建DF,而不是单独的DF对象。
{1: 'dfdistrictname1', 2: 'dfdistrictname2', 3: 'dfdistrictname3'}
oppdetail_oppview_2023_districtname1.csv
dfdistrictname1
oppdetail_oppview_2023_districtname2.csv
dfdistrictname2
oppdetail_oppview_2023_districtname3.csv
dfdistrictname3
我知道python正在做我要求它做的事情。我的问题是我如何获得单独的DFs?
1条答案
按热度按时间zzwlnbp81#
如果我对问题的理解是正确的(我可能不正确)
您有未知数量的
.csv
文件要全局加载到各个 Dataframe 中。我建议如下:
1.首先,使用
pathlib.Path.glob
扫描与您的名称结构匹配的.csv文件(以oppdetail_oppview_
开始,名称中包含district
,以.csv
结束)。下面的例子在脚本的工作目录(
.
)中查找文件。这可能与您的系统不同。1.使用enumerate对结果进行迭代,以便同时获得可迭代结果中的索引和
Path
对象本身1.使用索引为将存储每个 Dataframe 的变量计算合适的名称。
1.加载dataframe并将其注入到globals()符号中,使它们成为某种全局变量。
这最后一部分通常被认为是一个不太好的实践,因为您将基本上以编程方式声明一个全局变量,这意味着你所有的链接都会被弄糊涂。嗯...阅读代码的人也会被弄糊涂。想象一下有人在阅读你的代码,突然看到变量
dfdistrictname1
被使用。现在他们试图查看该变量在哪里被声明/初始化/younameit...他们找不到的此外,在将名称注入
globals()
之后,很难知道您是否声明了2个或5个或10个dfdistrictnameX
变量。有了这些成分,你可以尝试以下方法: