#python-3.x #pandas #dataframe #dictionary
Вопрос:
Я работал с 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)
Я пытался извлечь данные для достижения своих целей, хотя у меня были некоторые трудности. Мои цели заключаются в следующем:
- извлеките данные и напишите алфавитный словарь с «carIndex» в качестве ключа и значением 0 — 2 (связано с автомобилем A — C)
- извлеките данные и напишите алфавитный словарь с «carMake» в качестве ключа и значением 0 — 1 (Связано с Make X amp; Y)
- Создайте (три) пары ключ-значение для значений make «X» и «Y»(связанных с carIndex A-C) Если значение не существует, индекс должен быть Нулевым. добавьте все три в список списков.
- Наконец, возьмите все три поля (Первый словарь, Второй словарь, Список списков) и добавьте их в кортеж для экспорта
У кого-нибудь есть предложения о том, как я могу извлечь данные так, как я хочу? Заранее спасибо.
В ответ на:
Не могли бы вы добавить к вопросу две вещи: 1. текстовую версию вашего фрейма данных (предпочтительно из печати(df.to_dict ())) и 2. образец фрейма данных, содержащий ваши ожидаемые выходные данные?
- печать(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}}
- Выходной кортеж, который я хочу: печать(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]])