如何解决Python CSV 文件行比较
OrderedDict([('key1','value1'),('key2','value2'),('key3','value3'),('key4','value4'),('key5','value5')])
我想比较相邻行上的两个键以查找匹配项并将这些行(字典)存储到列表中。
#if (key1 and key2) in row[i+1] == row[i]
#append row[i] and row[i+1] to a new match list; becomes a list of dicts
#else go to next row
我正在努力理解如何在 python 中引用一行。我知道 enumerate 会为我提供每一行的索引号,但我不清楚如何或是否可以将其用作参考。 Itertools 似乎会有所帮助,但不确定如何应用它。
解决方法
我假设你的 csv 文件就像你提到的那样
key1,key2,...
val11,val12,..
val21,val22,..
现在编码如果
with open('test.csv','r') as f:
csv_lst = list(csv.DictReader(f)) # if your csv is large than this can be problem
for first_row,next_row in zip(csv_lst,csv_lst[1:]):
print("Now you have both row with dictionary you can apply your logic ")
python 并行迭代的方法是使用 zip
,所以我转换了列表中的所有 csv 数据,然后 zip(csv_list,csv_list[1:])
第一个参数表示从 0 开始,其他参数表示从 csv_list
开始,从 1 开始所以你将有 0 1,1 2,2 3
次列表迭代。
根据定义,字典中的键是唯一的。因此,比较 2 个“行”的键不太可能奏效。此解决方案使用熊猫。
假设“Sample_data.csv”包含这些行(“键”作为第一列):
键、值
A,1
B,2
C,3
C,33
D,4
E,5
E,55
import pandas as pd
data1 = pd.read_table('sample_data.csv',sep=',') # imports data into dataframe
outdata = (data1[['keys']]==data1[['keys']].shift()).any(axis=1) # bool of rows to capture
data2 = data1.loc[outdata | outdata.shift(-1),] # captured rows and one before it,includes all columns
data2
输出:
索引 | 键 | 价值观 |
---|---|---|
2 | C | 3 |
3 | C | 33 |
5 | E | 5 |
6 | E | 55 |
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。