Python CSV文件行比较



我有一个csv文件,其中每行看起来像:

OrderedDict([('key1', 'value1'), ('key2', 'value2'), ('key3', 'value3'), ('key4', 'value4'), ('key5', 'value5')]) 

我想比较相邻行上的两个键以找到匹配项,并将这些行(dicts(存储到列表中。

#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中引用一行。我知道枚举会为每一行提供一个索引号,但我不清楚如何或是否可以将其用作引用。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开始启动csc_list,其他参数表示从1开始csv_list,所以你将有列表的0 1, 1 2,2 3迭代。

根据定义,字典中的键是唯一的。因此,比较两个"行"的键不太可能奏效。此解决方案使用熊猫。

假设"Sample_data.csv"包含以下行(以"keys"作为第一列(:

密钥、值

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

输出:

5
索引
2C3
3C33
5E
6E55

相关内容

  • 没有找到相关文章

最新更新