Python 从CSV文件创建目录并仅获取一个
我简要解释了在故障发生前我所做的工作: 根据列的值,将读取CSV文件并将其分为两个不同的文件。 这一栏指的是食品的类型,“carne”一类被划分为其他不同的类别。 这就是为什么我决定分为2个CSV文件。这些CSV文件包含一列 现在我想创建一些与这2个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
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而不是脚本所在的文件夹。