Python 按字段值对CSV文件中的数据进行分组
我有一个csv文件,在第一列中有重复的值。我想为第一列的一个值收集列表中第二列的所有值Python 按字段值对CSV文件中的数据进行分组,python,csv,Python,Csv,我有一个csv文件,在第一列中有重复的值。我想为第一列的一个值收集列表中第二列的所有值 column1 column2 a 54.2 s 78.5 k 89.62 a 77.2 a 65.56 我想变得像 print a # [54.2,77.2,65.56] print s # [78.5] print k # [89.62] 使用python的代码似乎相当简单 data.csv a,54.2 s,78.5 k,8
column1 column2
a 54.2
s 78.5
k 89.62
a 77.2
a 65.56
我想变得像
print a # [54.2,77.2,65.56]
print s # [78.5]
print k # [89.62]
使用python的代码似乎相当简单 data.csv
a,54.2
s,78.5
k,89.62
a,77.2
a,65.56
script.py
import csv
result = {}
with open('data.csv', 'rb') as csvfile:
csvreader = csv.reader(csvfile, delimiter=',', quotechar='"')
for row in csvreader:
if row[0] in result:
result[row[0]].append(row[1])
else:
result[row[0]] = [row[1]]
print result
import csv
from collections import defaultdict
result = defaultdict(list) # each entry of the dict is, by default, an empty list
with open('data.csv', 'rb') as csvfile:
csvreader = csv.reader(csvfile, delimiter=',', quotechar='"')
for row in csvreader:
result[row[0]].append(row[1])
print result
输出
{
'a': ['54.2', '77.2', '65.56'],
's': ['78.5'],
'k': ['89.62']
}
正如@Pete所指出的,你可以通过以下方式美化它: script.py
import csv
result = {}
with open('data.csv', 'rb') as csvfile:
csvreader = csv.reader(csvfile, delimiter=',', quotechar='"')
for row in csvreader:
if row[0] in result:
result[row[0]].append(row[1])
else:
result[row[0]] = [row[1]]
print result
import csv
from collections import defaultdict
result = defaultdict(list) # each entry of the dict is, by default, an empty list
with open('data.csv', 'rb') as csvfile:
csvreader = csv.reader(csvfile, delimiter=',', quotechar='"')
for row in csvreader:
result[row[0]].append(row[1])
print result
一种方法是使用pandas,填充数据框,使用groupby,然后将列表应用于所有组:
import pandas as pd
df = pd.DataFrame({'column1':['a','s','k','a','a'],'column2':
[54.2,78.5,89.62,77.2,65.56]})
print(df.groupby('column1')['column2'].apply(list))
输出:
column1
a [54.2, 77.2, 65.56]
k [89.62]
s [78.5]
Name: column2, dtype: object
我对python非常陌生,我尝试过逐行读取文件,你在这方面成功了吗?你走了多远?我建议你研究一下
csv
模块和字典。对于新手来说,如果数据真的那么简单,字符串拆分可能比使用csv模块更容易。使用defaultdict
更容易。的确,但对于新手来说,这可能有点让人困惑。说句公道话,必须把一个函数传递给对象和所有这些。现在我必须在函数中传递字典值。但我的函数以list作为参数。你能帮我点忙吗?我的函数名百分位数(N,.95),其中N是列表。我现在有{'a':['54.2','77.2','65.56'],'s':['78.5'],'k':['89.62']}。我怎样才能将['54.2'、'77.2'、'65.56']作为名为“a”的列表传递