在Python中将CSV文件转换为字典时强制转换数据类型

在Python中将CSV文件转换为字典时强制转换数据类型,python,python-3.x,dictionary,tuples,Python,Python 3.x,Dictionary,Tuples,我有一个CSV文件,看起来像这样 Item,Price,Calories,Category Orange,1.99,60,Fruit Cereal,3.99,110,Box Food Ice Cream,6.95,200,Dessert ... 我想用这种格式建立一个Python字典: {'Orange': (1.99, 60, 'Fruit'), 'Cereal': (3.99, 110, 'Box Food'), ... } 我想确保删除列的标题(即不包括第一行)。 以下是我到目前为止所

我有一个CSV文件,看起来像这样

Item,Price,Calories,Category
Orange,1.99,60,Fruit
Cereal,3.99,110,Box Food
Ice Cream,6.95,200,Dessert
...
我想用这种格式建立一个Python字典:

{'Orange': (1.99, 60, 'Fruit'), 'Cereal': (3.99, 110, 'Box Food'), ... }
我想确保删除列的标题(即不包括第一行)。

以下是我到目前为止所做的尝试:

reader = csv.reader(open('storedata.csv'))

for row in reader:
    # only needed if empty lines in input
    if not row:
        continue
    key = row[0]
    x = float(row[1])
    y = int(row[2])
    z = row[3]
    result[key] = x, y, z

print(result)
然而,当我这样做时,我得到一个
ValueError:无法将字符串转换为float:“Price”
,我不知道如何修复它。我想把这三个值保存在一个元组中


谢谢

我建议使用
pandas.read_csv
阅读您的
csv
文件:

import pandas as pd

df = pd.DataFrame([["Orange",1.99,60,"Fruit"], ["Cereal",3.99,110,"Box Food"], ["Ice Cream",6.95,200,"Dessert"]],
            columns= ["Item","Price","Calories","Category"])
我已尝试按如下所示构建您的数据:

打印(df)
首先,创建一个空的
Python字典
来保存文件,然后利用
pandas.DataFrame.iterrows()

res = {}


for index, row in df.iterrows():
    item = row["Item"]
    x = pd.to_numeric(row["Price"], errors="coerce")
    y = int(row["Calories"])
    z = row["Category"]
    res[item] = (x,y,z) 
事实上,打印
res
会产生
预期输出
,如下所示:

print(res)

{'Orange': (1.99, 60, 'Fruit'),
 'Cereal': (3.99, 110, 'Box Food'),
 'Ice Cream': (6.95, 200, 'Dessert')}

如果您使用的是名为
df的
pandas.DataFrame
,只需使用
dict
plus
zip

dict(zip(df['Item'],df['Price','carries','Category']].values.tolist()) {'Orange':[1.99,60,'水果'],'Graines':[3.99110,'盒装食品'],'Ice Cream':[6.95200,'甜点']}
此错误的意思是在“价格”列中。有些行包含类似字符串的内容。向我们展示
读卡器的示例数据
。如果这是一个
数据帧
,你能在读卡器上使用
.info()
方法吗。@PandasJ我刚刚把它转换成了一个数据帧。以下是信息:
RangeIndex:4个条目,0到3个数据列(共4列):04个非空对象14个非空对象2 4个非空对象3 4个非空对象数据类型:对象(4)内存使用:256.0+字节
我想在元组中包含其他项,而不是列表。对什么投了否决票?如果您想将值转换为元组,可以这么简单:
dict(zip(df['Item',map(tuple,df['Price','carries','Category']].values.tolist())
print(res)

{'Orange': (1.99, 60, 'Fruit'),
 'Cereal': (3.99, 110, 'Box Food'),
 'Ice Cream': (6.95, 200, 'Dessert')}