Получить имена столбцов каждого фрейма данных pandas отдельно внутри списка

#python #pandas

#python #pandas

Вопрос:

У меня есть фрейм данных pandas, и я хочу извлечь имя каждого столбца по отдельности и добавить его в список.

Я попробовал что-то вроде этого:

 def get_hist_data(data):
    # create an empty list
    histdata = []
    for col in data.columns:
        test_list = "data['{}']".format(col)
        histdata  = [test_list]
    histdata = '[%s]' % ', '.join(map(str, histdata))

    return histdata
  

и результат, который я получил, — это список, в котором data сейчас находится строка:

 [data['A'], data['B'],data['C']]
  

Я не хочу data в виде строки, но хочу, чтобы это было как фрейм данных, который я передал в качестве параметра моей функции def get_hist_data(data): , и внутри фрейма данных будет размещено имя каждого столбца.

Я хочу тот же вывод, который показан выше, но data будет не строкой, а фреймом данных, где каждое имя столбца будет размещено как data['A'], data['B']...

Ответ №1:

Вы можете получить доступ к столбцу фрейма данных в виде списка с помощью df[col].to_list()

 def get_hist_data(data):
    histdata = []
    for col in data.columns:
        histdata.append(data[col].to_list())
    return histdata
  

Это вернет список подсписков, где каждый подсписк был столбцом в оригинале data .

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

1. получение вывода, подобного [[0.20377654359365033, -0.9022193353460645, -1.1331746961471256…..]] но я хочу [данные [‘A’], данные [‘B’], данные[‘C’]]

2. Я думаю, проблема, с которой вы столкнулись, заключается в том, что python не может хранить представления таким образом. У вас может быть ["data['A']", "data['B']","data['C']"] , где каждый элемент является строкой. Но если вы хотите, чтобы каждый элемент в списке был ссылкой на столбец фрейма данных, тогда вы получите этот первый вывод. Если каждый элемент списка является списком, он расширит этот список и отобразит полученный результат : [[0.203...etc . Если бы вы могли подробнее объяснить, почему вы хотите, чтобы данные хранились таким образом, тогда мы могли бы вам помочь. т. е. Почему вывод, который вы получаете`[[0.203 …, …]], не соответствует вашим потребностям?

3. Это для построения этих переменных в plotly: hist_data = [df['A'], df['B'], df['C']] colors = ['#A56CC1', '#A6ACEC', '#63F5EF'] group_labels = ['Group 1', 'Group 2', 'Group 3'] densityPlot = figure_factory.create_distplot(hist_data, group_labels, colors=colors, bin_size=.2, show_rug=False) app.layout = html.Div([ dcc.Graph( id='densityPlot', figure=densityPlot ) ])

4. Вы пробовали пример с выводом, например [[0.203, -0.902, -1.133],[…]] ? Это работает для меня. Просто запустите то, что у вас есть с: hist_data = get_hist_data(data) # Use the function from my answer Путаница заключается в том, что пример, который вы читаете, показывает [df['A'], df['B'], df['C']] , но когда вы запускаете это, он вычисляет фактические числа. Это то же самое.

Ответ №2:

Вы можете сделать что-то вроде этого:-

 histdata = []
for col in data:
    df = pd.DataFrame(data[col]) 
    histdata.append(df)

for col in histdata:
    print(col)
  

Здесь histdata будет содержать все фреймы данных.