pandasデータフレームからインデックス値を抽出し、それらを新しいデータフレームの列として追加したいと思います。しかし、Pythonは、抽出されたインデックスが、抽出元のデータフレームとして構造(行x列)を持っていることを示すエラーをスローします。
データフレームのインデックス値を、通常のリストとして使用できる単純なリストとして抽出するにはどうすればよいですか?
エラー:
ValueError: Shape of passed values is (10, 1), indices imply (10, 10)
私が試したこと:
## 1
pd.DataFrame(subset_df.index, subset_df[var], percentiles, percentiles_main)
## 2
ix = subset_df.index.get_level_values('College').tolist()
pd.DataFrame(ix, subset_df[var], percentiles, percentiles_main)
## 3
ix = [i for i in subset_df.index.get_level_values('College')]
pd.DataFrame(ix, subset_df[var], percentiles, percentiles_main)
## 4
ix = [i for i in subset_df.index.get_level_values('College').values]
## 5
ix = [i for i in subset_df.index.get_level_values('College').values.tolist()]
## 6
ix = subset_df.index.get_level_values('College').to_numpy()
## 7
ix = [i for i in subset_df.index.get_level_values('College').array]
## 8
pd.DataFrame(pd.IndexSlice[ix], percentiles, percentiles_main)
## 9
import operator
index = subset_df.index.tolist()
desired_index = list(set(map(operator.itemgetter(1), index)))
pd.DataFrame(desired_index, ptiles, ptiles_main)
上記のすべてのアプローチで同じValueErrorが発生しました。
問題を再現するには:
import numpy as np
import pandas as pd
# Import data
url = "https://statlearning.com/College.csv"
dfo = pd.read_csv(url)
dfo.head(1)
# Add college names as 2nd index
df = dfo.set_index('Unnamed: 0', append=True)
df.rename_axis(index=['SN', 'College'], inplace=True)
# Created a subset of dataframe
subset_df = df.sort_values(by='Top10perc', axis=0, ascending=False)[0:10]
subset_df
# Calculation of percentiles
from scipy.stats import percentileofscore as prtl
ptiles_main = [round(prtl(df['Top10perc'],i,'weak'),2) for i in subset_df['Top10perc']]
ptiles = [round(prtl(df['Grad.Rate'],i,'weak'),2) for i in subset_df['Grad.Rate']]
# Creating a new dataframe with college names and percentiles
## this is where I'm getting ValueError
pd.DataFrame(subset_df.index.get_level_values('College').values.tolist(), ptiles, ptiles_main)
#> ValueError: Shape of passed values is (10, 1), indices imply (10, 10)
# this is the output without trying to add index
pd.DataFrame(ptiles, ptiles_main)
# 0
# 100.00 94.98
# 99.87 76.06
# 99.87 99.87
# 99.87 98.58
# 99.49 97.30
# 99.49 98.58
# 99.49 99.87
# 99.10 61.39
# 98.97 97.94
# 98.97 97.30
私の質問には2つの部分があります:(
より重要な部分)
1)通常のリストを使用できるあらゆる方法で使用できる単純なリストとしてデータフレームのインデックス値を抽出する方法
(二次部分)
2)ptile_dfに大学名を追加する方法
データフレームを作成しようとしている方法が原因でエラーが発生しています。この方法で試してください:
pd.DataFrame({'College':subset_df.index.get_level_values('College').tolist(),
'Grad.Rate':subset_df['Grad.Rate'].values,
'Percentile':ptiles, 'Percentile_main':ptiles_main})
または
ptile_df = pd.concat([pd.Series(subset_df.index.get_level_values('College')),
pd.Series(subset_df['Grad.Rate'].values), pd.Series(ptiles),
pd.Series(ptiles_main)], axis=1)
ptile_df.columns = ['College','Grad.Rate','Percentile','Percentile_main']
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加