1. ホーム
  2. python

[解決済み】Pandas - 関数のドロップエラー(ラベルが軸に含まれていない)【重複】。

2022-01-31 10:43:07

質問

以下のようなCSVファイルがあります。

index,Avg,Min,Max
Build1,56.19,39.123,60.1039
Build2,57.11,40.102,60.2
Build3,55.1134,35.129404123,60.20121

私の質問に基づくと こちら この短いスクリプトで、このcsvにいくつかの関連情報を追加することができます。

import pandas as pd

df = pd.read_csv('newdata.csv')
print(df)

df_out = pd.concat([df.set_index('index'),df.set_index('index').agg(['max','min','mean'])]).rename(index={'max':'Max','min':'Min','mean':'Average'}).reset_index()

with open('newdata.csv', 'w') as f:
    df_out.to_csv(f,index=False)

この結果、このようなCSVができあがります。

index,Avg,Min,Max
Build1,56.19,39.123,60.1039
Build2,57.11,40.102,60.2
Build3,55.1134,35.129404123,60.20121
Max,57.11,40.102,60.20121
Min,55.1134,35.129404123,60.1039
Average,56.1378,38.1181347077,60.16837

このcsvを更新できるようにしたいのですが。例えば、新しいビルド(例えばbuild4)を実行した場合、それを追加して、Max、Min、Averageの行をやり直すことができます。私の考えでは、Max、Min、Averageのラベルを持つ行を削除し、新しい行を追加し、統計情報をやり直します。必要なコードは次のような単純なものだと思います(Maxだけですが、MinとAverageの行も必要です)。

df = pd.read_csv('newdata.csv')
df = df.drop('Max')

しかし、この場合、常に ValueError: ラベル ['Max'] が軸に含まれていません。

csvファイルはsublime textで作成しましたが、これも問題の一部でしょうか?この件に関する他のSOの投稿を読みましたが、どれも私の問題の解決にはならないようです。

これが許されるかどうかわからないが、以下は 私のcsvへのダウンロードリンク ファイル自体に何か問題がある場合に備えて。

2つの回答が考えられるので、大丈夫だと思います。

  1. このドロップの問題を解決するには
  2. ビルドを追加して統計情報を更新する方法(ドロップしない方法)

解決方法は?

デフォルトはaxis = 0で、行と列はaxis = 1となります。

というわけで、これがあなたのコードになります。

df = df.drop('Max',axis=1)

を編集します。 このコードを見ていると

df = pd.read_csv('newdata.csv')
df = df.drop('Max')

使用したコードでは、csv ファイルの最初の列がデータフレームのインデックスを含むことが指定されていません。そのため、pandasはインデックスをオンザフライで作成します。このインデックスは純粋に数値的なものです。ですから、あなたのインデックスは "Max" を含んでいません。

を試してみてください。

df = pd.read_csv("newdata.csv",index_col=0)
df = df.drop("Max",axis=0)

これは、pandasがcsvファイルの最初のカラムをインデックスとして使用することを強制します。これでコードが動作するようになるはずです。