Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将excel数据循环到字典中,每个键有多个值_Python_Excel_For Loop_Dictionary_Openpyxl - Fatal编程技术网

Python 将excel数据循环到字典中,每个键有多个值

Python 将excel数据循环到字典中,每个键有多个值,python,excel,for-loop,dictionary,openpyxl,Python,Excel,For Loop,Dictionary,Openpyxl,我对Python还比较陌生,我认为这个问题相当简单,但我想不出来 我在excel中有一个数据表,其中有B列字符串和C到I列作为值。我想创建一个字典,其中为 B列,我分配C列到I列的值。我知道了如何在每行中执行此操作,一次一个,但我正在寻找一个for循环语法来执行此操作 在整个excel数据表中 这是我的密码: NYSE = {} NYSE.setdefault(sheet['B5'].value, []).append(sheet['C5'].value) NYSE.setdefault(she

我对Python还比较陌生,我认为这个问题相当简单,但我想不出来

我在excel中有一个数据表,其中有B列字符串和C到I列作为值。我想创建一个字典,其中为 B列,我分配C列到I列的值。我知道了如何在每行中执行此操作,一次一个,但我正在寻找一个
for
循环语法来执行此操作 在整个excel数据表中

这是我的密码:

NYSE = {}
NYSE.setdefault(sheet['B5'].value, []).append(sheet['C5'].value)
NYSE.setdefault(sheet['B5'].value, []).append(sheet['D5'].value)
NYSE.setdefault(sheet['B6'].value, []).append(sheet['C6'].value)
NYSE.setdefault(sheet['B6'].value, []).append(sheet['D6'].value)
print NYSE

我可以继续手动添加…B7 C7、B7 D7等,但必须有一种方法可以在函数中循环并输出字典。

您考虑过使用Pandas吗?我不确定你的数据目标是什么,但这似乎是实现你想要的最可靠的方法


如果使用
pandas.read_excel(path,sheetname=None)
则默认创建一个字典,其中每个键都是一个工作表,每个值都是该工作表的数据框。然后,您可以迭代字典,将它们合并在一起。使用伪数据样本更容易获得更具体的数据。

您可以尝试以下方法:

from collections import defaultdict

d = defaultdict(list)
for line in open("pyex.csv").readlines():
    line = line.strip()
    line = line.split(",")
    key, value = line[0], line[1:]
    d[key] += value
print(d)
所以,如果你有一个csv文件,看起来像这样。其中,第一列是字符串,第二列和之后的每一列都是值:

crow    19    13
bird    16    32
此代码将输出:

defaultdict(<class 'list'>, {'crow ': ['19', '13'], 'bird': ['16', '32']})
输出:

{'crow': ['19', '13'], 'bird': ['16', '32']}
甚至可以使用csv库

import csv

csv_file = open("pyex.csv")
csv_reader = csv.reader(csv_file)

d = {}
for line in csv_reader:
    key = line[0]
    for value in line[1:]:
        d.setdefault(key, []).append(value)
print(d)
正如@martineu所说,您不需要defaultdicts或setdefaults:

import csv

csv_file = open("Book1.csv")
csv_reader = csv.reader(csv_file)

d = {}
for line in csv_reader:
    key = line[0]
    d[key] = line[1:]
print(d)

您能将其转换为csv文件吗?是的,我可以使用csv或xlsx文件。这是否允许为数据中的每一行分配键值和多个值?例如,B列都是键,C、D、E都是表中每行的值。这些列是分布在需要在一个键上关联的多个工作表中,还是它们只是同一工作表中的列?无论哪种方式,答案都是肯定的-数据帧本质上是一种关系结构,它允许您按行和列处理数据并执行各种操作。我很快尝试了这一点,但出现了以下错误:defaultdict(,{})hmmmm,您认为我可以看到您的csv文件吗?我还编辑了我的答案以容纳更多的值。我将尝试使用
setdefault
而不是@Deuce525?嘿,我认为setdefault的更新让我更接近了,但它打印了一个空字典{}
import csv

csv_file = open("Book1.csv")
csv_reader = csv.reader(csv_file)

d = {}
for line in csv_reader:
    key = line[0]
    d[key] = line[1:]
print(d)