#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 будет содержать все фреймы данных.