【问题标题】:Python3, Pandas, Extract associated Data from Dataframe to dictionariesPython3,Pandas,从 Dataframe 中提取相关数据到字典
【发布时间】:2022-01-03 02:31:41
【问题描述】:

我一直在处理 CSV 文件。我根据文件创建了一个数据框:

并添加了索引名称。并打印数据框(添加了索引名称):

#Here is the code before failed computations.
import pandas as pd
import csv

colName = ['carIndex', 'carMake', 'Floatnum']
data2 = pd.read_csv('cars.csv', names=colName)
print(data2)

我一直在尝试提取数据以实现我的目标,尽管我遇到了一些困难。我的目标如下:

  1. 提取数据并以“carIndex”为键,值为0 - 2(与汽车A - C相关联)编写字母字典

  2. 提取数据并以“carMake”为键,值为 0 - 1(与 Make X 和 Y 相关联)编写字母字典

  3. 为“X”和“Y”的值创建(三个)键值对(与 carIndex A-C 相关联)如果值不存在,则索引应为无。将所有三个附加到列表列表中。

  4. 最后取所有三个字段(第一个字典、第二个字典、列表列表)并将它们添加到一个元组中以进行导出

有人对我如何根据需要提取数据有任何建议吗?提前致谢。

回应:

您能否在问题中添加两件事:1. 数据框的文本版本(最好来自 print(df.to_dict())),以及 2. 包含预期输出的示例数据框?

  1. print(data2.to_dict()) (输出) --> {'carIndex': {0: 'Car C', 1: 'Car A', 2: 'Car B', 3: 'Car B' , 4: '汽车 A'}, 'carMake': {0: '制造 X', 1: '制造 X', 2: '制造 X', 3: '制造 Y', 4: '制造 Y'}, 'Floatnum': {0: 2.0, 1: 2.5, 2: 1.5, 3: 4.0, 4: 3.5}}

  2. 我想要的输出元组: print(my_tup) (outputs) --> ({'汽车 A': 0, '汽车 B': 1, '汽车 C': 2}, {'制造 X': 0, '制造 Y': 1}, [[2.5, 3.5], [1.5, 4.0], [1.0, 无]])

【问题讨论】:

  • 您能否在问题中添加两件事:1. 数据框的文本版本(最好来自 print(df.to_dict())),以及 2. 包含预期输出的示例数据框?
  • @user17242583 我以字典的形式添加了数据框的文本版本。接下来添加了我想要的输出元组。谢谢。

标签: python-3.x pandas dataframe dictionary


【解决方案1】:

提取数据并以“carIndex”为键,值为0 - 2(与汽车A - C相关)编写字母字典

sorted =  data2.sort_values('carIndex').drop_duplicates(subset='carIndex').reset_index()
carIndexDict = sorted['carIndex'].to_dict()

这将输出

{0: 'Car A', 1: 'Car B', 2: 'Car C'}

提取数据并以“carMake”为键,值为 0 - 1(与 Make X 和 Y 相关联)编写字母字典

使用相同的策略:

sorted =  data2.sort_values('carMake').drop_duplicates(subset='carMake').reset_index()
carMakeDict = sorted['carMake'].to_dict()

输出:

{0: 'Make X', 1: 'Make Y'}

列出清单:

carIndexes = carIndexDict.values()
carMakes = carMakeDict.values()

full_list = []

for idx in carIndexes:
  idx_search = data2.loc[df['carIndex'] == idx]
  car_list = []
  for make in carMakes:
    make_search = idx_search.loc[idx_search['carMake'] == make]
    if not make_search.empty:
      car_list.append(make_search['Floatnum'].iloc[0])
    else:
      car_list.append(None)

  full_list.append(car_list)

输出:

[[2.5, 3.5], [1.5, 4.0], [2.0, None]]

最后是元组:

myTuple = (carIndexDict, carMakeDict, full_list)

输出:

({0: 'Car A', 1: 'Car B', 2: 'Car C'}, {0: 'Make X', 1: 'Make Y'}, [[2.5, 3.5], [1.5, 4.0], [2.0, None]])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    • 2021-11-25
    相关资源
    最近更新 更多