为了账号安全,请及时绑定邮箱和手机立即绑定

读取两行CSV Python之间的列值

读取两行CSV Python之间的列值

森林海 2022-05-24 09:22:22
我有一个 CSV,格式为:Name1,Value1,Value2,Value3Name2,Value40,Value50,Value60Name3,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]”。:
查看完整描述

2 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

尝试pandas:


import pandas as pd


df = 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


查看完整回答
反对 回复 2022-05-24
?
森栏

TA贡献1810条经验 获得超5个赞

我认为您面临的问题是由于您的嵌套循环。两个循环都指向同一个迭代器。您将在找到 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 input

objlist = []

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]


查看完整回答
反对 回复 2022-05-24
  • 2 回答
  • 0 关注
  • 135 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号