我有一个csv
文件,我用分隔符','
分割。我的目标是遍历整个文件的第一列,如果它与我拥有的单词匹配,那么我需要将该特定行的后续值放入不同的列表中。
示例:
AAA,man,2300,
AAA,woman,3300,
BBB,man,2300,
BBB,man,3300,
BBB,man,2300,
BBB,woman,3300,
CCC,woman,2300,
CCC,man,3300,
DDD,man,2300,
我的代码:
import csv
datafile = "test.txt"
with open('C:/Users/Dev/Desktop/TEST/Details/'+datafile, 'r') as f:
reader = csv.reader(f,delimiter=',')
for row in reader:
print (rows)
如果我搜索值BBB
,我希望将行的其余细节分成3个不同的列表。 (CSV文件总是只有4列;有时候第四列可能是空的,所以我们只留下逗号)
样品:
list1 = [man, man, man, woman]
list2 = [2300, 3300, 2300, 3300]
list3 = [ , , , ,]
我该怎么做?
答案 0 :(得分:2)
尝试使用pandas:
import pandas as pd
df = pd.read_csv('path/to/file',sep=',',header=None)
现在只需使用:
list1,list2,list3 = df[df[0] == "BBB"].T.values.tolist()
示例df:
df = pd.DataFrame(dict(col1=["AAA","BBB","BBB"],
col2=[1,2,3],
col3=[4,5,6]))
输出:
(['BBB', 'BBB'], [2, 3], [5, 6]) #list1,list2,list3
答案 1 :(得分:1)
您可以初始化三个空列表变量,然后在行循环中,如果c1与您的值匹配,则将后续列附加到列表中。 编辑:或者在Anton VBR上使用pandas已经回答了。
答案 2 :(得分:1)
你的问题的答案在你的陈述中:“如果我搜索一个值,比如说BBB,我希望将行的其余细节分成3个不同的列表”
创建空列表: -
list1=[]
list2=[]
list3=[]
将值附加到这些列表中: -
for row in reader:
if ( row[0] == "BBB" ):
list1.append(row[1])
list2.append(row[2])
list3.append(row[3])
答案 3 :(得分:1)
我会忽略你从csv文件中读取数据的部分。
让我们从列表(2d数组)开始。构造一个for循环以仅搜索row1的条件 - 例如result vector=[1,2,7,8,9]
。此向量包含符合您条件的指数列表。
现在让“过滤”列表只是另一个用于循环提取所有其他行索引result_vector
。