У меня есть фрейм данных, как показано ниже
td = {966: [('Feat1', -0.04),
('Feat2=True ', -0.02),
('Feat3 <= 20000.00', 0.01),
('Feat4=Power Supply', -0.01),
('Feat5=dada', -0.0)],
879: [('Feat8=Rare', 0.02),
('Feat11=HV', -0.01),
('Feat21=Power Supply', -0.01),
('20000.00 < Feat3 <= 50000.00', 0.01),
('Feat5=dada', -0.01)]}
Я хотел бы сделать ниже
А) Разделить кортеж в dict на основе запятой ,
Б) сохранить числовую часть в столбце value
фрейма данных и текстовую часть в столбце feature
фрейма данных
C) повторите значения ключей для всех значений в кадре данных (и сохраните их в столбце key
)
Я попробовал следующее, но это неэффективно/элегантно и не масштабируется для больших данных из миллионов строк.
feature=[]
value=[]
key=[]
for k, v in td.items():
for x in v:
key.append(k)
f, v = x
feature.append(f)
value.append(v)
data_tuples = list(zip(key,feature,value))
pd.DataFrame(data_tuples, columns=['key','feature','value'])
Я ожидаю, что мой выход будет, как показано ниже
2 ответа
Используйте понимание генератора с плоскими значениями и перейдите к конструктору DataFrame
:
df = pd.DataFrame()(k,b,c) for k, v in td.items() for b, c in v),
columns=['key','feature','value'])
print (df)
key feature value
0 966 Feat1 -0.04
1 966 Feat2=True -0.02
2 966 Feat3 <= 20000.00 0.01
3 966 Feat4=Power Supply -0.01
4 966 Feat5=dada -0.00
5 879 Feat8=Rare 0.02
6 879 Feat11=HV -0.01
7 879 Feat21=Power Supply -0.01
8 879 20000.00 < Feat3 <= 50000.00 0.01
9 879 Feat5=dada -0.01
Вы даже можете использовать понимание генератора для данных, чтобы избежать создания полного списка в памяти:
pd.DataFrame(([k, elt[0], elt[1]] for k,v in td.items() for elt in v),
columns = ['key', 'Feature', 'Value'])
key Feature Value
0 966 Feat1 -0.04
1 966 Feat2=True -0.02
2 966 Feat3 <= 20000.00 0.01
3 966 Feat4=Power Supply -0.01
4 966 Feat5=dada -0.00
5 879 Feat8=Rare 0.02
6 879 Feat11=HV -0.01
7 879 Feat21=Power Supply -0.01
8 879 20000.00 < Feat3 <= 50000.00 0.01
9 879 Feat5=dada -0.01
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.