93208


タイトルにあるようにあるCSVデータをpd.csv_readで読み込み、  
dataframeのcolumnsを変更するとindexの行の上に「0」が入ります。  
そのままデータフレームのplot()を実行すると凡例に「0」が入ってしまいます。  
この0の削除方法をご教示お願いします。

CSVデータは以下です。

[code]

    import pandas as pd　#pandasのインポート
    
    df = pd.read_csv('test_data.csv')
    print(df)
    
[/code]

実行結果A（test_data.csv）

[code]

        Unnamed: 0 正弦波01　0.25Hz   正弦波02　0.2Hz   正弦波03　0.3Hz 正弦波04　0.15Hz
    0      時刻[sec]           振幅            振幅            振幅           振幅
    1            0            0             0             0            0
    2          0.1  0.156434465   0.062666617    0.13116692  0.047054157
    3          0.2  0.309016994   0.124344944   0.257687187  0.093690657
    4          0.3    0.4539905   0.184062276   0.375078756  0.139495553
    ..         ...          ...           ...           ...          ...
    97         9.6  0.587785252  -0.240876837  -0.479182974  0.184062276
    98         9.7    0.4539905  -0.184062276  -0.375078756  0.139495553
    99         9.8  0.309016994  -0.124344944  -0.257687187  0.093690657
    100        9.9  0.156434465  -0.062666617   -0.13116692  0.047054157
    101         10  6.12574E-16   -2.4503E-16  -5.14562E-16  1.83772E-16
    
    [102 rows x 5 columns]
    
[/code]

実行コードは以下

[code]

    import pandas as pd　#pandasのインポート
    
    #データの1行目を読み込み。
    temp = pd.read_csv("test_data.csv", header=None, nrows=1)
    #1行目をHeader作成           
    header = temp.iloc[0]
    
    #3行目以降のデータだけ読み込み
    df = pd.read_csv("test_data.csv", header=None, skiprows=2)
    
    #カラム名にheaderを指定
    df.columns = header
    print(df)
    
    #結果確認　1列目を横軸に指定
    import japanize_matplotlib #日本語ライブラリのインポート
    df.plot(x=df.columns[0])
    
    
[/code]

実行結果B

[code]

    0     NaN  正弦波01　0.25Hz   正弦波02　0.2Hz   正弦波03　0.3Hz  正弦波04　0.15Hz
    0     0.0  0.000000e+00  0.000000e+00  0.000000e+00  0.000000e+00
    1     0.1  1.564345e-01  6.266662e-02  1.311669e-01  4.705416e-02
    2     0.2  3.090170e-01  1.243449e-01  2.576872e-01  9.369066e-02
    3     0.3  4.539905e-01  1.840623e-01  3.750788e-01  1.394956e-01
    4     0.4  5.877853e-01  2.408768e-01  4.791830e-01  1.840623e-01
    ..    ...           ...           ...           ...           ...
    96    9.6  5.877853e-01 -2.408768e-01 -4.791830e-01  1.840623e-01
    97    9.7  4.539905e-01 -1.840623e-01 -3.750788e-01  1.394956e-01
    98    9.8  3.090170e-01 -1.243449e-01 -2.576872e-01  9.369066e-02
    99    9.9  1.564345e-01 -6.266662e-02 -1.311669e-01  4.705416e-02
    100  10.0  6.125740e-16 -2.450300e-16 -5.145620e-16  1.837720e-16
    
    [101 rows x 5 columns]
    <AxesSubplot: xlabel='nan'>
    
[/code]

[![プロットの結果](https://i.stack.imgur.com/igLv6.png)](https://i.stack.imgur.com/igLv6.png)

解決したい問題は以下です。

  * 実行結果Bのprint(df)のdataframeの左上に「0」が出現しており削除したい。またこの正体を知りたい。
  * 実行結果Bのplotの凡例に「0」が出現しており削除したい。またこの正体を知りたい。

試したこと  
実行コードの、

[code]

    #3行目以降のデータだけ読み込み
    df = pd.read_csv("test_data.csv", header=None, skiprows=2)
    
[/code]

の時点でのdfをプロット「df.plot()」した場合は、  
「0」は入りませんでした。  
「0」が出現するのは、以下の部分が原因と思っています。

[code]

    #カラム名にheaderを指定
    df.columns = header
    
[/code]

お手数ですが、ご教示いただけると助かります。  
よろしくお願いします。


CC BY-SA 4.0
2023-01-06T03:17:11.767
93207
2023-01-06T03:46:22.763
2023-01-06T03:30:26.493
19110
56411
question
python pandas dataframe
dataframeのcolumnsを変更するとindexの上に0が入る


CSV 側にヘッダー行が実質 2 行分あって、2 行目は無視したいが、そのための処理を書いたとき意図しない位置にも名前が入ってしまうということですね。

`pd.read_csv` をする際に `skiprows=2` で先頭の 2 行を無視するのではなくて、`skiprows=[1]` で 2
行目だけ無視するようにするのが早いです。

[code]

    df = pd.read_csv('test_data.csv', skiprows=[1])
    
[/code]

<https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html>

> **skiprows** : _list-like, int or callable, optional_  
>  Line numbers to skip (0-indexed) or number of lines to skip (int) at the
> start of the file.

なお、質問文のやり方でいくつかの場所に `0` が出現するのは、`iloc[0]` を使った関係で `df.columns` の `name` に `0`
が設定されているためです。


CC BY-SA 4.0
2023-01-06T03:46:22.763
93208
2023-01-06T03:46:22.763
19110
93207
answer