在R
中有一个名为assign
的函数,它为环境中的名称分配一个值。
EG:
assign("Hello", 2)
> Hello
[1] 2
在 python 中我似乎不能做同样的事情。我最初尝试过:
import numpy as np
import pandas as pd
import os
for file in os.listdir('C:\\Users\\Olivia\\Documents'):
if file.endswith(".csv"):
os.path.splitext(file)[0] = pd.read_csv('C:\\Users\\Olivia\\Documents\\' + file)
但我可以看到这是试图使一个字符串等于一个不起作用的文件。
我设法通过执行以下操作来获取列表中的所有文件:
import glob
dl = glob.glob(r'C:\Users\Olivia\Documents\*.csv')
nl = []
for i in dl:
pl = i.split(os.sep)
name = pl[5][:-4]
nl.append(name)
ddict = {}
for k, v in zip(nl,dl):
ddict[k] = ddict.get(k,"") + v
dfl = []
for k, v in ddict.items():
dfl.append(read_csv(v))
但是现在我如何从列表中获取每个数据帧并将其命名为不带扩展名的文件。必须有一种方法可以将列表中的每个数据框指定为文件列表中的名称
最佳答案
老实说,您的第一种方法走在正确的轨道上。不幸的是,正如您已经尝试并意识到的那样,Python 并没有为您提供动态创建“可变数量的变量”的选项。 但是!您可以创建一个字典并根据需要将数据帧分配给字符串键。方法如下。
root = 'C:\\Users\\Olivia\\Documents'
ddict = {}
for file in os.listdir(root):
if file.endswith(".csv"):
name = os.path.splitext(file)[0]
ddict[name] = pd.read_csv(os.path.join(root, file))
构建此字典的另一种方法是使用字典理解:
ddict = {os.path.splitext(file)[0] : pd.read_csv(os.path.join(root, file))
for file in os.listdir(root) if file.endswith('csv')
}
现在,引用单个数据框就像这样简单
ddict['your_file_name']
另一件事需要注意,最安全的连接文件的方法是使用os.path.join
。它比普通的 +
更安全。
引用文献
关于Python:循环遍历目录并使用文件名作为数据框名称保存每个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46950173/