私はここでいくつかの問題に直面し、私は私の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)
sort()
は、次のいずれかを優先してDataFramesで廃止されました。
sort_values()
からまでの列でソートsort_index()
からまでインデックスでソートsort()
とsort_values()
の導入により、sort_index()
はPandasでリリース0.17(2015-10-09)で非推奨(しかしまだ利用可能)です。リリース0.20(2017-05-05)でPandasから削除されました。
sort
はv0.20で sort_values
と sort_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
たとえば、df
のbothcol "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.abs
とSeries.argsort
を使用することができます。 この記事でも議論しました (私はその質問に答えました)。