猿问

读取两行CSV Python之间的列值

我有一个 CSV,格式为:


Name1,Value1

,Value2

,Value3

Name2,Value40

,Value50

,Value60

Name3,Value5

,Value10

,Value15

每个“名称”没有固定数量的“值”。

名称没有模式。


我想将每个名称的值读入一个字典,例如:


Name1 : [Value1,Value2,Value3]

Name2 : [Value40,Value50,Value60] 

etc.

我目前的代码是这样的:


CSVFile = open("GroupsCSV.csv")

Reader = csv.reader(CSVFile)

for row in Reader:

    if row[0] and row[2]:

        objlist = []

        objlist.append(row[2])

        for row in Reader:

            if not row[0] and row[2]:

                objlist.append(row[2])

            else:

                break

        print(objlist)

这事半功倍。

它会做 Name1,Name3,Name5,Name7 等。

我似乎找不到阻止它的方法skipping。


宁愿在不使用 Lambda 之类的东西的情况下执行此操作(因为它还不是我完全理解的东西!)。

编辑:示例 csv 的图像(真实数据有另一个不必要的列,因此代码中的“行 [2]”。:

森林海
浏览 136回答 2
2回答

富国沪深

尝试pandas:import pandas as pddf = pd.read_csv('your_file.csv', header=None)(df.ffill()                # fill the blank with the previous Name  .groupby([0])[1]         # collect those with same name  .apply(list)             # put those in a list  .to_dict()               # make a dictionary)输出:{'Name1': ['Value1', 'Value2', 'Value3'], 'Name2': ['Value40', 'Value50', 'Value60'], 'Name3': ['Value5', 'Value10', 'Value15']}更新:纯 python(3) 解决方案:with open('your_file.csv') as f:    lines = f.readlines()d = {}for line in lines:    row = line.split(',')    if row[0] != '':         key = row[0]        d[key] = []    d[key].append(row[1])d

森栏

我认为您面临的问题是由于您的嵌套循环。两个循环都指向同一个迭代器。您将在找到 Name1 后开始第二个循环,并在找到 Name2 时将其中断。到外部循环在中断后继续时,您已经跳过了 Name2。您可以在同一个循环中同时拥有这两个条件:# with open("GroupsCSV.csv") as csv_file:#     reader = csv.reader(csv_file)reader = [[1,2,3],[None,5,6]] # Mocking the csv inputobjlist = []for row in reader:    if row[0] and row[2]:        objlist.clear()        objlist.append(row[2])    elif not row[0] and row[2]:        objlist.append(row[2])    print(objlist)编辑:我更新了代码以提供可测试的输出。打印输出如下所示:[3][3, 6]
随时随地看视频慕课网APP

相关分类

Python
我要回答