Python:循环遍历目录并使用文件名作为数据框名称保存每个文件

标签 python pandas loops assign

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/

相关文章:

javascript - GOTO iMacros 中的循环变量

Python 参数,用于 in 项目

c - 在 C 中处理字符数组

python Pandas : 'numpy.ndarray' object has no attribute 'apply'

python - Pandas 更改索引数据类型

python - Pandas : Missing values from Yahoo Finance

python - AttributeError : Can only use . 具有 datetimelike 值的 dt 访问器

python - 如何从文件中读取两行并在 for 循环中创建动态键?

python - Sikuli 函数和运算符列表

python - 计算 pandas 列中指定范围值的平均值并存储为另一列