csvを読み取るときにパンダのインデックス列を削除する


128

CSVファイルをインポートする次のコードがあります。3つの列があり、最初の2つを変数に設定します。2番目の列を変数「効率」に設定すると、インデックス列も追加されます。インデックス列を取り除くにはどうすればよいですか?

df = pd.DataFrame.from_csv('Efficiency_Data.csv', header=0, parse_dates=False)
energy = df.index
efficiency = df.Efficiency
print efficiency

使ってみた

del df['index']

私が設定した後

energy = df.index

これは別の投稿で見つかりましたが、「KeyError: 'index'」という結果になります

回答:


70

データフレームシリーズには常にインデックスがあります。列の横に表示されますが、列ではないため、機能del df['index']しませんでした。

インデックスを単純な連番に置き換える場合は、を使用しますdf.reset_index()

インデックスが存在する理由とその使用方法を理解するには、たとえば「10分からパンダまで」を参照してください。


1
ありがとう!パンダを使わない別の方法でインポートすることにしました。私は各列でいくつかの算術を実行する必要があり、Pythonはインデックス列がアタッチされているのが好きではありませんでした。パンダは確かにデータをインポートする最も簡単な方法ですが、常に私が見つけた最高のものではありません。
ボグダンJaniszewski 2013年

2
Pandasを使って演算を試しましたか?
ジェイミーブル

1
インデックス名を削除できますか?
2014

3
はい、index.name = None
Dan Allan

1
@BogdanJaniszewski、パンダを使用しなかった場合、なぜこれを答えとして受け入れたのですか?
multigoodverse '29年

249

CSVファイルを読み書きするときは、index=Falseたとえば次のように引数を含めます。

 df.to_csv(filename, index=False)

そしてCSVから読み取る

df.read_csv(filename, index=False)  

これで問題が回避されるため、後で修正する必要はありません。


8
どうもありがとうございました。これはまさに質問が求めているものです。
ペールブルードット

1
「header = False」は同じ方法でヘッダーを削除するために機能します
J.Dahlgren

29
する必要がありますindex_col=False
Vedda 2018

1
を使用df.to_sql("table",cursor,if_exists="append",index=False)すると、sqliteエラーも修正されますsqlite3.OperationalError: table message has no column named index
Anna

1
@veddaあると思われるindex=Falseためto_excel()index_col=Falseしてread_csv()パンダ0.23.4に。:-/
マットウィルキー

70

df.reset_index(drop=True, inplace=True)


2
これは実際には私のお気に入りのソリューションですが、あまり複雑な答えではありません。マニュアルは、引数についてこれを読みますdrop。「データフレーム列にインデックスを挿入しないでください。これにより、インデックスがデフォルトの整数インデックスにリセットされます。」pandas.pydata.org/pandas-docs/stable/generated/...
tommy.carstensen

@ tommy.carstensen次に、前のインデックスの代わりにインデックスの整数を取得しないようにするにはどうすればよいですか?あなたのリンクのテキストの誤解だと思います。ここの問題は、インデックスを削除することです。そして、これはここに達しています。インデックスがないと日付フレームがないため、デフォルトの整数が取得されますが、前のインデックスは削除されています。このため、この回答は受け入れられる回答である必要があります。また、メモリを効率的に使用するためinplace=Trueです。
ローレンツ

13

たとえば「id」の場合、列の1つをインデックスとして設定できます。この場合、インデックス列は選択した列のいずれかに置き換えられます。

df.set_index('id', inplace=True)

3

問題が私の場合と同じで、列ヘッダーを0から列サイズにリセットしたいだけの場合。行う

df = pd.DataFrame(df.values);

編集:

異種のデータ型がある場合はお勧めできません。使用するだけ

df.columns = range(len(df.columns))

2

問題が解決しない場合は、from_csv関数のindex_colパラメータを使用して、csvファイルのインデックスである列を指定できます。データの例を提供してください


2

私は一つのことは、df=df.reset_index() その後、df=df.drop(['index'],axis=1)


エラー:「ラベル['インデックス']は軸に含まれていません」
Vasin Yuriy

@VasinYuriyこれはのような意味df.reset_index().drop(columns=['yourfirstindex', 'yoursecondindex'])で、インデックスに名前がない標準の場合にのみ「インデックス」で機能し、次に「インデックス」と呼ばれる列になりますdf.reset_index().drop(columns=['index'])。追加されたパラメーターaxis=1はデフォルトです。この方法はお勧めしません。@ SubhojitMukherjee reset_index(inplace=True)は「インプレース」で動作するため、メモリを節約できます。
ローレンツ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.