70452


`cross = pd.crosstab(x["id"], x["flag"])`  
として以下のデータフレームが生成されました。  
「9」列が0でないものに絞りたいのですが、

[code]

    cross
    Out[1]:
    flag      1  2  3  4  5  9
    id
    10001    1  0  1  0  2  0
    10002    1  0  0  0  1  0
    10003    1  0  0  0  1  0
    10004    1  0  0  0  1  0
    10005    1  0  0  0  1  0
    cross[cross.9 >= 1]
      File "<ipython-input-132-22b4f5ce4612>", line 1
        cross[cross.9 >= 1]
                    ^
    SyntaxError: invalid syntax
    
[/code]

とりあえず9列だけ出力しようとしてもうまく行かず、  
renameもうまくいきませんでした。

[code]

    cross['9']
    KeyError: '9'
    
    
    cross.9
    SyntaxError: invalid syntax
    
[/code]

この後の操作や、データの作り等からilocなどで列番号での指定は避けたいです。  
よろしくお願いいたします。

**実行環境**  
Windows 10  
Python 3.7


CC BY-SA 4.0
2020-09-14T15:01:14.413
70388
2020-09-16T12:00:20.007
2020-09-14T15:57:36.350
12457
12457
question
python pandas
pandasのヘッダが数字になってしまったときの対処法


columnsの属性について見てみました。

[code]

    cross.columns
    Out[11]: Int64Index([1, 2, 3, 4, 5, 9], dtype='int64', name='flag')
    cross.columns.map(str)
    Out[12]: Index(['1', '2', '3', '4', '5', '9'], dtype='object', name='flag')
    
[/code]

Int64Indexという属性になるとアクセスが困難になるようです。

metropolilsさんに頂いた回答の通り、`cross.columns =
cross.columns.map(str)`とすれば`cross['9']`でアクセスもでき、renameも可能でした。  
ありがとうございました。


CC BY-SA 4.0
2020-09-16T12:00:20.007
70452
2020-09-16T12:00:20.007
12457
70388
answer