Python3, Панды, Извлекают связанные данные из фрейма данных в словари

#python-3.x #pandas #dataframe #dictionary

Вопрос:

Я работал с CSV-файлом. Я создал фрейм данных на основе файла: csv_file_before_changes

и добавил имена индексов. и напечатал фрейм данных (с добавленными именами индексов):

Print_Output_data2

 #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 amp; Y)
  3. Создайте (три) пары ключ-значение для значений make «X» и «Y»(связанных с carIndex A-C) Если значение не существует, индекс должен быть Нулевым. добавьте все три в список списков.
  4. Наконец, возьмите все три поля (Первый словарь, Второй словарь, Список списков) и добавьте их в кортеж для экспорта

У кого-нибудь есть предложения о том, как я могу извлечь данные так, как я хочу? Заранее спасибо.

В ответ на:

Не могли бы вы добавить к вопросу две вещи: 1. текстовую версию вашего фрейма данных (предпочтительно из печати(df.to_dict ())) и 2. образец фрейма данных, содержащий ваши ожидаемые выходные данные?

  1. печать(data2.to_dict()) (вывод) —gt; {‘carIndex’: {0: ‘Автомобиль C’, 1: ‘Автомобиль A’, 2: ‘Автомобиль B’, 3: ‘Автомобиль 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. Выходной кортеж, который я хочу: печать(my_tup) (выходы) —gt; ({«Автомобиль A»: 0, «Автомобиль B»: 1, «Автомобиль C»: 2}, {«Сделать X»: 0, «Сделать Y’: 1}, [[2.5, 3.5], [1.5, 4.0], [1.0, Нет]])

Комментарии:

1. Не могли бы вы добавить к вопросу две вещи: 1. текстовую версию вашего фрейма данных (предпочтительно из print(df.to_dict()) ) и 2. образец фрейма данных, содержащий ваши ожидаемые выходные данные?

2. @user17242583 Я добавил текстовую версию фрейма данных в виде словаря. А затем добавил нужный мне выходной кортеж. Спасибо.

Ответ №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 amp; 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]])