在Python中存储.csv数据

时间:2015-06-09 11:54:01

标签: python list csv

我有两个变量 - animalsfood;如果我打印它们看起来像

var1 var2
pig  acorn
pig  acorn
pig  carrot
pig  potato
pig  acorn
pig  carrot
dog  meat
dog  acorn
dog  carrot
dog  potato
dog  carrot
dog  meat
cat  meat
cat  fish
cat  carrot
cat  potato

依旧......

我希望这些数据以下列格式存储在新的CSV文件中(但无法弄清楚如何操作):

animals   food   count
pig       acorn  15
pig       carrot 7
pig       potato 10
dog       acorn  2
dog       meat   10
dog       potato 1

依旧...... 换句话说,我希望animals变量中的观察值与food变量中的不同类型的项目重复出现的次数完全相同,并将聚合得分放在一个新变量中。例如,如果有50次出现pig,其中30次是acorn,其中10次是carrot和10次potato,我希望它看起来像这样:

pig acorn  30
pig carrot 10
pig potato 10

2 个答案:

答案 0 :(得分:4)

首先 - 这与CSV本身没什么关系。如果你想计算这里的值,使用字典是一个好主意,所以你需要的是(我假设动物和食物是列表):

counts = {}
for animal, food in zip(animals, foods):
    counts.setdefault((animal, food), 0)
    counts[(animal, food)] += 1

在这个循环之后,你将得到一个字典,其中的键是(动物,食物)元组和值。所以你可以把它们写成csv,如:

for ((animal, food), count) in counts.items():
    csv_writer.writerow([animal, food, count])

答案 1 :(得分:3)

看起来你不知道Counter的{​​{1}}类collections。这是documentation

如果您想计算变量对:

c = Counter(zip(var1, var2))

要编写结果,请使用zetciu answer中报告的csv库,但请记住Counter实例为dict

with open('result.csv', 'wb') as csvfile:
    csv_writer = csv.writer(csvfile)
    csv_writer.writerow(["animals", "food", "count"])
    for pair,count in c.items():
         animal, food = pair
         csv_writer.writerow([animal, food, count])