Я пытаюсь преобразовать очень широкий CSV-файл с r строками и c столбцами в dict или фрейм данных с r *c строками и тремя столбцами в виде row_id, col_name, col_value. Поскольку количество столбцов очень велико - более 10000 - это невозможно сделать вручную.
Скажем, например, я начинаю с pandas кадра данных:
import pandas as pd
df = pd.DataFrame({'id': {0: '1', 1: '2', 2: '3'},
'c1': {0: 'S', 1: 'S', 2: 'D'},
'c2': {0: 'XX', 1: 'WX', 2: 'WX'},
'c3': {0: '32', 1: '63', 2: '32'}})
df = df.set_index('id')
это выглядит следующим образом:
id c1 c2 c3
0 1 S XX 32
1 2 S WX 63
2 3 D WX 32
Имейте в виду, что в этом примере фрейм данных имеет только три столбца, но решение должно работать с очень большим количеством столбцов.
Цель состоит в том, чтобы преобразовать это в dict или dataframe, который выглядит следующим образом:
id key value
0 1 c1 S
1 1 c2 XX
2 1 c3 32
3 2 c1 S
4 2 c2 WX
5 2 c3 63
6 3 c1 D
7 3 c2 WX
8 3 c3 32
Я написал что-то, что достигает желаемого результата путем итерации по столбцу и строке из dataframe в новый dataframe:
data = []
for i, row in df.iterrows():
for j, column in row.iteritems():
a_dictionary = i, j, column
data.append(a_dictionary)
df_out = pd.DataFrame(data)
df_out.columns = ['id', 'key', 'value']
Но я читал, что можно и нужно избегать использования циклов for
в pandas и python. Так как же будет выглядеть правильное решение?