LoginSignup
macoto01
@macoto01

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Pythonカラムに関する質問

解決したいこと

カラムを一部分だけ変更(指定)したい。
または、特定の列をカラム名と指定したい。

例)
Excelを読み込み、DateFrameを使用してPythonを組んでいます。
月によってカラム名と長さが変わる物を使用しています。
その為、ある特定の列をカラム名として使用したいと考えています。
解決方法を教えて下さい。

具体的に)
希望のカラム名:A,B,C,1,2,7,8,9,10,13,14,15,16,17,20,21,22,23,24,27,28,29,30,31,合計

元のカラム名:NaN,NaN,NaN,い,ろ,は,に,(略)る,を,合計
(英語部分は不変、数字部分は変動あり)

3列目にUnnamed:3,A,B,C,1,2,7,8,9,10,13,14,15,16,17,20,21,22,23,24,27,28,29,30,31,合計
という列が存在します。

自分で試したこと

カラムを一部分だけ変更する

df.rename(columns={"仮","A","B","C"})
結果:Error(カラム数が足りませんと言われました。)

replace
試したが、カラム名が同一だった為失敗。

特定の列をカラム名とする

df.columns = df.iloc[0]
こちらを使用するとカラム名にはなりましたが、columnとindexの交わる場所(0,0)?にも文字が含まれてしまい今後の作業に影響があった為断念。

他にも色々試しましたが、情報整理の際に削除してしまいました。

どちらも、もしくはどちらかの解決を教えてください。
よろしくお願いします。

0

3Answer

確認です。

月によってカラム名と長さが変わる物を使用しています。

「カラム名」と「カラム数」が変わるということでしょうか?
月毎にシートがあるのでしょうか?

その為、ある特定の列をカラム名として使用したいと考えています。

その「特定の列」より上のデータはどのように扱うのでしょうか?
無視でよければ、削除してしまえばどうでしょうか。

0

Comments

  1. @macoto01

    Questioner

    「カラム名」と「カラム数」が変わるということでしょうか?
    月毎にシートがあるのでしょうか?

    >はい。そうです。来月は来月のExcelを用い、数字の所が来月の平日に変わります。

    その「特定の列」より上のデータはどのように扱うのでしょうか?
    無視でよければ、削除してしまえばどうでしょうか。

    >必要な列と不要な列に挟まれています。
    重ね重ねの質問になってしますのですが、削除してしまえばわざわざカラムにする必要がなくなるという意味でしょうか?
    今後、このデータで計算を行うので、カラム名を変更したいと考えているのですが…

    よろしくお願いします。

  2. DateFrameに入れてしまってからの操作は難しいと思います。

    自分が考えた方法は、不要列と行の削除と列名を変更する前段処理を設け、
    DateFrameで読み込む用に、加工した別のExcelファイルを作ることです。

    前段処理は、Excel VBAでも、Pythonでも作れると思います。Pythonならopenpyxlを使ってExcelファイルを操作できます。

  3. @macoto01

    Questioner

    なるほど。
    別のExcelを作成するのですね…

    管理が面倒になるので、Python内で完結したいと思いますが、ご回答いただきありがとうございました!!

先人のPythonをよんだ所、希望行をカラム名にすることは出来ました。

df.set_axis(df.iloc[3,:].tolist(),axis=1)

何故かtolist()をつけると解決しました。(なお理由は不明な模様)

希望列だけカラム名を変更する方法は引き続き探しているのでよろしくお願いします。

0

先の書き込みの、以下の部分がカラム名になるのはわかっていて、この部分は単なるリストなので、必要な部分の値を変更してから設定してやればいいでしょう。

df.iloc[3,:].tolist()

column_names = df.iloc[3,:].tolist()
# column_namesを適切に変更する
columun_names[0] = 'A'  # など

df.set_axis(column_names,axis=1)
0

Your answer might help someone💌