Python 从CSV文件创建目录并仅获取一个

Python 从CSV文件创建目录并仅获取一个,python,pandas,dataframe,csv,directory,Python,Pandas,Dataframe,Csv,Directory,我简要解释了在故障发生前我所做的工作: 根据列的值,将读取CSV文件并将其分为两个不同的文件。 这一栏指的是食品的类型,“carne”一类被划分为其他不同的类别。 这就是为什么我决定分为2个CSV文件。这些CSV文件包含一列 现在我想创建一些与这2个CSV文件相关的目录: 其他类别:包括鱼,沙拉,鸡蛋 Carne:包括不同类型的肉,需要放在肉的子目录中 这就是carne.csv的样子: 0 0 carnero 1 ave 2 ternera

我简要解释了在故障发生前我所做的工作: 根据列的值,将读取CSV文件并将其分为两个不同的文件。 这一栏指的是食品的类型,“carne”一类被划分为其他不同的类别。 这就是为什么我决定分为2个CSV文件。这些CSV文件包含一列

现在我想创建一些与这2个CSV文件相关的目录:

  • 其他类别:包括鱼,沙拉,鸡蛋
  • Carne:包括不同类型的肉,需要放在肉的子目录中
  • 这就是carne.csv的样子:

                0
    0     carnero
    1         ave
    2     ternera
    3       anade
    4     cabrito
    5       capon
    6     caracol
    
    类别应按如下顺序排列:

    Salad
    Fish
    ...
    Meat
        Chicken
        Beef
        ....
    
    我编写的代码用于设置这两种类型的目录:

    other_categories = pd.read_csv('other_categories.csv')
    baseDir = "data/"
    for category in other_categories:
        os.mkdir(os.path.join(baseDir,category))
        
    carne = pd.read_csv ('carne.csv')
    baseDir_carne = "data/carne/"
    for category in carne:
        os.makedirs(os.path.join(baseDir_carne,category))
    
    查看目录,它只创建了一个文件夹,名称为
    '0'


    为什么会这样?如何解决此问题?

    您正在使用pandas解析CSV表,这将创建一个数据帧

    将逗号分隔值(csv)文件读入数据帧。

    这意味着不能对每个方法使用标准,因为DataFrame不是一个简单的集合。因此,该部分不能按预期工作:

    for category in other_categories:
    
    为了迭代这些项,我建议使用一种内置方法,比如itertuples

    一个小例子。假设x是解析到数据帧中的CSV文件:

    import pandas as pd
    
    x = pd.DataFrame([["carnero"],["ave"],["ternera"]])
    
    for cat in x.itertuples():
        print(cat)
    
    它将打印以下元组:

    熊猫(指数=0,_1='carnero')

    熊猫(指数=1,_1='ave')

    熊猫(指数=2,_1='ternera')

    您现在可以定期访问元组,例如,将
    print(cat)
    替换为
    print(cat[1])
    以访问第二个元组元素,将返回字符串

    将这些知识转移到您的代码中,for each应该遵循以下几点:

    for category in carne.itertuples():
        os.makedirs(os.path.join(baseDir_carne,category[1]))
    
    我希望这澄清了你的问题,请随意问一下你是否遗漏了什么


    干杯

    谢谢你提供的信息,但我不明白你的意思。这不会创建目录。这只会创建元组,我对此不感兴趣。您尝试像集合一样访问数据帧,但这不起作用。您需要使用提供的方法之一。itertuples()为您提供了行的元组,因此您现在可以实际访问数据帧中的数据。我无法编辑我以前的注释,因此这里有另一条:您需要创建元组以实际访问数据帧中的数据。我用你的代码在我的答案中添加了一个例子,你需要把这个应用到两个for-each循环中。好的,我终于明白了。我试过了,但出现了一些错误<代码>[Errno 17]文件存在:'/home/datasci/prog_datasci_2/activities/activity_2/salsas'该文件夹不存在。它是在使用“for”循环时创建的。你知道为什么吗?可能有几个原因。最简单的一个问题是:您是否检查了正确的文件夹?我试过这个代码,但似乎效果很好。但是,如果您将路径从
    baseDir=“data/”
    更改为
    baseDir=“/data/”
    ,它将在不同的位置创建文件夹,例如在
    C:/data/
    中,如果您使用的是Windows而不是脚本所在的文件夹。