web-dev-qa-db-ja.com

'DataFrame'オブジェクトには属性 'sort'がありません

私はここでいくつかの問題に直面し、私は私のPythonパッケージで私はnumpyをインストールしていますが、私はまだこのエラーがあります 'DataFrame'オブジェクトは属性 'sort'を持ちません

だれでも私に何か考えを与えることができます。

これは私のコードです:

final.loc[-1] =['', 'P','Actual']
final.index = final.index + 1  # shifting index
final = final.sort()
final.columns=[final.columns,final.iloc[0]]
final = final.iloc[1:].reset_index(drop=True)
final.columns.names = (None, None)
67
Shi Jie Tio

sort()は、次のいずれかを優先してDataFramesで廃止されました。

sort()sort_values()の導入により、sort_index()はPandasでリリース0.17(2015-10-09)で非推奨(しかしまだ利用可能)です。リリース0.20(2017-05-05)でPandasから削除されました。

170
Brad Solomon

sortはv0.20で sort_valuessort_index に置き換えられました。これ以外に、argsortもあります。

これがソートの一般的なユースケースと、現在のAPIのソート機能を使用してそれらを解決する方法です。まず、設定です。

# Setup
np.random.seed(0)
s = pd.Series(np.random.choice(100, 5))
df = pd.DataFrame({'A': list('accddabbea'), 'B': np.random.choice(10, 10)})    
df

   A  B
0  a  7
1  c  9
2  c  3
3  d  5
4  d  2
5  a  4
6  b  7
7  b  6
8  e  8
9  a  8

s

0    44
1    47
2    64
3    67
4    67
dtype: int64

単一列によるデータフレームのソート

たとえば、dfを列 "A"でソートするには、 DataFrame.sort_values を使用します。

df.sort_values(by='A')

   A  B
0  a  7
5  a  4
9  a  8
6  b  7
7  b  6
1  c  9
2  c  3
3  d  5
4  d  2
8  e  8

新しいRangeIndexが必要な場合は、 DataFrame.reset_index を使用してください。

sorted = df.sort_values(by='A').reset_index(drop=True)
sorted.head()

   A  B
0  a  7
1  a  4
2  a  8
3  b  7
4  b  6

DataFrameを複数の列でソートする

たとえば、dfbothcol "A"と "B"でソートするには、リストをsort_valuesに渡します。

df.sort_values(by=['A', 'B'])

   A  B
5  a  4
0  a  7
9  a  8
7  b  6
6  b  7
2  c  3
1  c  9
4  d  2
3  d  5
8  e  8

ソート系列

Series.sort_values で簡単に実行できます。

s.sort_values()

0    44
1    47
2    64
3    67
4    67
dtype: int64

私は答えた別の記事からのより詳しい情報:私は答えた: Pandasシリーズの並べ替え


インデックスによるデータフレーム(またはシリーズ)のソート

df2 = df.sample(frac=1)
df2

   A  B
0  a  7
9  a  8
2  c  3
3  d  5
5  a  4
6  b  7
7  b  6
1  c  9
8  e  8
4  d  2

DataFrame.sort_index を使ってこれを行うことができます。

df2.sort_index()

   A  B
0  a  7
1  c  9
2  c  3
3  d  5
4  d  2
5  a  4
6  b  7
7  b  6
8  e  8
9  a  8 

ここで Index.argsort を活用し、 DataFrame.iloc を使用してインデックスを再作成することもできます。

df2.iloc[df2.index.argsort()]

   A  B
0  a  7
1  c  9
2  c  3
3  d  5
4  d  2
5  a  4
6  b  7
7  b  6
8  e  8
9  a  8

または DataFrame.reindex でも numpy.sort でも

df2.reindex(np.sort(df2.index))

   A  B
0  a  7
1  c  9
2  c  3
3  d  5
4  d  2
5  a  4
6  b  7
7  b  6
8  e  8
9  a  8

これらのメソッドはSeriesにも適用されます。


インデックスのリストでデータフレーム(またはシリーズ)をソートする

例えば、

idx = df2.index.argsort()
idx
# array([0, 7, 2, 3, 9, 4, 5, 6, 8, 1])

この「ソート」問題は、実際には単純な索引付けの問題です。整数ラベルをilocに渡すだけでよいでしょう。

df.iloc[idx]

   A  B
0  a  7
7  b  6
2  c  3
3  d  5
9  a  8
4  d  2
5  a  4
6  b  7
8  e  8
1  c  9

絶対値によるソート

上記と同様に、Series.absSeries.argsortを使用することができます。 この記事でも議論しました (私はその質問に答えました)。

5
cs95