0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

pandasで欠損したヘッダーの対処をする

Last updated at Posted at 2020-12-02

したいこと

以下のようなcsvデータを読み込んだ後にいろいろ整形したいとしても,ヘッダーの数と各行のデータ数が合わない場合,うまく整形ができませんでした.
このような場合の対処のベストプラクティスがわからなくて無理やり対処しました.もしあれば教えていただきたいです.

id mean data
1 0.5 0.75 0.40 0.55 0.39 ...
2 0.3 0.25 0.10 0.35 0.43 ...
... ... ... ... ... ... ...

対処方法

誰もが思いつくことだと思うのですが,データはid列とmean列と複数のdata列が並べられているだけなので,headerを0に設定してnamesでヘッダーを無理やり上書きします.
そのためにお恥ずかしいですが以下のように2回データを取得して無理やりデータを整形し直して,得られたデータフレームに対して処理を加えます.データ数が多くなると同じことはできないと思うので,ベストプラクティスが知りたいです...

import pandas as pd

# csvの読み込み 1回目
# header=1にすることで一行目を無視しています.なので,この段階では2行目のデータがheaderの代わりになっています.
df_num = len(pd.read_csv('test.csv', header=1).columns)

# namesを作成します.ヘッダーは重複ができないので適当にindexをつけておきます
names = ['id', 'mean'] + ['data_%d'%(i+1) for i in range(df_num - 2)]

# csvの読み込み 2回目
# データを再度読み込みます.この際header=0としてnamesを上書きします.
df = pd.read_csv('test.csv', header=0, names=names)

上記のようにすることで,csvファイルのヘッダーを以下のように無理やり上書きしました.

id mean data_1 data_2 data_3 data_4 ...
1 0.5 0.75 0.40 0.55 0.39 ...
2 0.3 0.25 0.10 0.35 0.43 ...
... ... ... ... ... ... ...

これで一応mean列を消したりと欲しいデータに整形することが容易にできます.
pandasを普段からゴリゴリにつかっていないので,なにか良い方法があればコメントいただけると幸いです.
ご覧いただき,ありがとうございました.

0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?