gpt4 book ai didi

python - CSV 选择多列

转载 作者:行者123 更新时间:2023-11-30 22:29:25 25 4
gpt4 key购买 nike

我有这个 CSV 文件,其中包含大量信息。我编写了一个程序,能够计算“反馈”列内的内容及其频率。

我现在的问题是,在我生成“反馈”列中的项目后,我想专门拿出与“反馈”列相符的另一列。

CSV 文件的一些示例如下:

Feedback      Description    Status
Others Fire Proct Complete
Complaints Grass Complete
Compliment Wall Complete
... ... ...

根据“反馈”列的频率,我现在想要显示,假设我选择“投诉”。然后我希望显示与描述中的“投诉”相符的所有内容。

类似这样的事情:

Complaints    Grass
Complaints Table
Complaints Door
... ...

以下是我到目前为止的代码:

import csv, sys, os, shutil
from collections import Counter

reader = csv.DictReader(open('data.csv'))
result = {}
for row in reader:
for column, value in row.iteritems():
result.setdefault(column,[]).append(value)

list = []
for items in result['Feedback']:
if items == '':
items = items
else:
newitem = items.upper()
list.append(newitem)

unique = Counter(list)

for k, v in sorted(unique.items()):
print k.ljust(30),' : ', v

这只是计算“反馈”列内的内容及其频率的部分。

最佳答案

您还可以存储一个 defaultdict() 来保存每个类别的条目列表,如下所示:

import csv
from collections import Counter, defaultdict

with open('data.csv', 'rb') as f_csv:
csv_reader = csv.DictReader(f_csv)

result = {}
feedback = defaultdict(list)

for row in csv_reader:
for column, value in row.iteritems():
result.setdefault(column, []).append(value)
feedback[row['Feedback'].upper()].append(row['Description'])

data = []

for items in result['Feedback']:
if items == '':
items = items
else:
newitem = items.upper()
data.append(newitem)

unique = Counter(data)

for k, v in sorted(unique.items()):
print "{:20} : {:5} {}".format(k, v, ', '.join(feedback[k]))

这会将您的输出显示为:

COMPLAINTS           :     2  Grass, Door
COMPLIMENT : 2 Wall, Table
OTHERS1 : 1 Fire Proct

或者如果您使用的是多行:

    print "{:20} : {:5}".format(k, v)
print ' ' + '\n '.join(feedback[k])

使用 csv 库时,您应该在 Python 2.x 中使用 rb 打开文件。还要避免使用 list 作为变量名,因为这会覆盖 Python list() 函数。

注意:打印对齐数据时使用format()更容易。

关于python - CSV 选择多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46381507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com