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


101

私はここでいくつかの問題に直面しています、私の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)

回答:


220

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

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


15

パンダの選別101

sortv0.20ではDataFrame.sort_valuesおよびに置き換えられましたDataFrame.sort_index。これとは別に、もありargsortます。

次に、並べ替えの一般的な使用例と、現在のAPIの並べ替え関数を使用してそれらを解決する方法を示します。まず、セットアップ。

# Setup
np.random.seed(0)
df = pd.DataFrame({'A': list('accab'), 'B': np.random.choice(10, 5)})    
df                                                                                                                                        
   A  B
0  a  7
1  c  9
2  c  3
3  a  5
4  b  2

単一の列で並べ替え

たとえば、df列「A」でソートするにsort_valuesは、単一の列名で使用します。

df.sort_values(by='A')

   A  B
0  a  7
3  a  5
4  b  2
1  c  9
2  c  3

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

複数の列で並べ替え

たとえば、でcol "A"と "B"の両方で並べ替えるにdf、リストをsort_values次のように渡します。

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

   A  B
3  a  5
0  a  7
4  b  2
2  c  3
1  c  9

DataFrameインデックスで並べ替え

df2 = df.sample(frac=1)
df2

   A  B
1  c  9
0  a  7
2  c  3
3  a  5
4  b  2

あなたはこれを使用してこれを行うことができますsort_index

df2.sort_index()

   A  B
0  a  7
1  c  9
2  c  3
3  a  5
4  b  2

df.equals(df2)                                                                                                                            
# False
df.equals(df2.sort_index())                                                                                                               
# True

以下に、パフォーマンスと同等の方法をいくつか示します。

%timeit df2.sort_index()                                                                                                                  
%timeit df2.iloc[df2.index.argsort()]                                                                                                     
%timeit df2.reindex(np.sort(df2.index))                                                                                                   

605 µs ± 13.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
610 µs ± 24.2 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
581 µs ± 7.63 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

インデックスのリストで並べ替え

例えば、

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

この「ソート」の問題は、実際には単純なインデックス付けの問題です。整数ラベルを渡すだけで十分ilocです。

df.iloc[idx]

   A  B
1  c  9
0  a  7
2  c  3
3  a  5
4  b  2
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.