替换元组字典的最佳结构

2024-05-15 05:07:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要阅读具有以下结构的大型CSV:

Product Category, Length, Width, Height, Weight
category1,4,4,3,100
category2,5,2,3,150
category1,9,3,3,150
category3,2,2,2,50

阅读此CSV后,我需要获得每个类别的平均测量值。因此,作为平均计算之前的第一步,我想做一个循环,逐行读取csv,并将其值复制到元组字典中,其中每个键都是一个类别,每个元组都是每个度量值的总和加上每个类别中的产品总数。大概是这样的:

category1: (2,13,7,6,250)
category2: (1,5,2,3,150)
category3: (1,2,2,2,50)

我对Python非常陌生,所以直到现在我才意识到元组是不可变的,所以在为已经存在的类别查找新度量值时,这不允许我更新字典元组值。 我的问题是:对于这种需求,您会推荐什么样的数据结构?您将如何设置和更新这些测量值


Tags: csv字典度量productwidth类别结构length
2条回答

您可以使用pandasgroupby()函数(和pandasDataFrames)获得每个类别的平均值

import pandas as pd

df = pd.read_csv( FILE_NAME.csv )
averages_df = df.groupby(by=["Product Category"]).mean()

这将创建一个数据框,其行数与Product Category的唯一值相同,然后取每个类别剩余列的平均值

如果您的数据如下所示:

>>> df
      Product Category  Weight  Price
0            Fruit       1      2
1        Vegetable       2      3
2            Fruit       3      6

然后averages_df将如下所示:

>>> averages_df
                  Weight  Price
Product Category               
Fruit                  2      4
Vegetable              2      3

要访问特定类别的方法,您可以通过索引查找

>>> averages_df.loc["Fruit"]
Weight    2
Price     4

要访问特定类别和列的平均值,可以按索引和列查找

>>> averages_df.loc["Fruit","Price"]
4

您可以使用pandasiterrows并根据需要解析数据:

import pandas as pd

data = {"Product": ["category1","category2","category3"],
        "Category": [4,5,9], "Length": [4,2,3], "Width": [3,3,3]}
df = pd.DataFrame(data=data)
parsed_data = {}
for index, row in df.iterrows():
    parsed_data[row["Product"]] = (row["Category"], row["Length"], row["Width"])
print(parsed_data)

产出:

{'category1': (4, 4, 3), 'category2': (5, 2, 3), 'category3': (9, 3, 3)}

相关问题 更多 >

    热门问题