获取与我的pandas dataframe对象名称相同的csv文件名称

时间:2018-07-13 16:28:16

标签: python pandas

我有一个文件夹,其中包含多个csv文件和gz格式类型的压缩文件。这些未压缩的gz文件中的每个文件也包含一个csv文件。我想提取所有这些文件,并为每个文件创建一个与csv文件名相同的数据框(不带扩展名)。

例如,如果具有以下文件:

train.csv
test.csv
validation.csv.gz

我想拥有3个数据框对象,它们的名称恰好是:训练,测试和验证。

我已经尝试过此代码:

import pandas as pd
import gzip

extension = ".gz"

for item in os.listdir():
    if item.endswith(extension):
        with gzip.open(item) as f:
            item.split('.', 1)[0] = pd.read_csv(f) #Split on the first occurence of '.' and give this name to my dataframe
    else:
        item.split('.', 1)[0] = pd.read_csv(item)

此代码不起作用,因为当我尝试访问环境变量时,python找不到它们。

任何帮助,请!!

2 个答案:

答案 0 :(得分:0)

使用字典存储可变数量的变量。

尽管可以通过字符串命名变量,但强烈建议不要这样做。字典是高性能的,可让您以结构化的方式维护对象的集合。

d = {}

for item in os.listdir():
    fn, ext = item.split('.')
    if ext == 'gz':
        with gzip.open(item) as f:
            d[fn] = pd.read_csv(f)
    else:
        d[fn] = pd.read_csv(item)

然后通过d['train']d['test']等访问。

您的代码不起作用,因为item.split('.', 1)[0]是标量,而不是可以分配对象的变量名。

答案 1 :(得分:0)

字符串是不可变的。如果要将动态对象分配给给定的字符串,只需使用exec

  

此语句支持动态执行Python代码。首先   表达式的计算结果应为字符串,打开的文件对象或   一个代码对象。

import pandas as pd
import gzip

extension = ".gz"

for item in os.listdir():
    if item.endswith(extension):
        with gzip.open(item) as f:
            exec(item.split('.', 1)[0] + "=" + "pd.read_csv(f)" ) #Split on the first occurence of '.' and give this name to my dataframe
    else:
        exec(item.split('.', 1)[0] + "=" + "pd.read_csv('" + item + "')")