

初心者なので言葉足らずかもしれませんがよろしくお願いします．

csvファイル（ファイル名"data-path"）で1列目に1行目から順に以下の様に書かれています．  
1行目から見ていき最初に1.0以上の数値（この場合1.5）を見つけ出しそれまでのデータ（1－4行目）を削除しそれをcsvで保存するプログラムを書こうとしていましたがうまくいかないので質問させていただきました．一応私はif文を用いて書こうと思っていました．

**CSVファイルの例:**

[code]

    0.1
    0.3
    0.2
    0.9
    1.5
    0.8
    1.1
    以下略
    
[/code]

[code]

    import numpy as np
    import pandas as pd
    from pandas import Series, DataFrame
    import matplotlib.pyplot as plt
    %matplotlib inline
    
    data_path_A = '201016tamesi.csv'
    
    #データの読み込み
    data_all_A = pd.read_csv(data_path_A)
    data_all_A = np.array(data_all_A)
    
    for i in range(90000):
        if data_all_A[i] > 0.1: #参照値が0.03
             data_all_A=np.delete(data_all_A,i,0)
        else:
            break
            
    print(data_all_A)
    
[/code]


CC BY-SA 4.0
2020-11-02T07:30:40.327
71660
2020-11-02T09:33:36.497
2020-11-02T07:58:34.613
42568
42568
question
python
if 文 簡単なデータ処理


`dropwhile()` を使うのが一番楽かと思います。

[code]

    from itertools import dropwhile
    
    data = (0.1, 0.3, 0.2, 0.9, 1.5, 0.8, 1.1)
    
    for x in (dropwhile(lambda y: y < 1.0, data)):
        print(x)
    
    1.5
    0.8
    1.1
    
[/code]

<https://docs.python.org/ja/3/library/itertools.html#itertools.dropwhile>

補足(編集)  
ループで参照する配列のデータを削除すると要素のインデックスがずれるので基本やってはいけません(コスト的にもおすすめしません)。新たに配列を作るやり方にすべきです。


CC BY-SA 4.0
2020-11-02T08:14:09.497
71663
2020-11-02T08:27:50.930
2020-11-02T08:27:50.930
13227
13227
71660
answer


[pandas.DataFrame.idxmax](https://pandas.pydata.org/pandas-
docs/stable/reference/api/pandas.DataFrame.idxmax.html) を利用して、`1.0`
以上の最初の行を決定します。

[code]

    import pandas as pd
    
    data_path_A = '201016tamesi.csv'
    
    data_all_A = pd.read_csv(data_path_A, header=None)
    data_all_A = (
      data_all_A.loc[data_all_A[0].ge(1.0).idxmax():]
      .reset_index(drop=True)
    )
    print(data_all_A)
    
    =>
         0
    0  1.5
    1  0.8
    2  1.1
    
[/code]


CC BY-SA 4.0
2020-11-02T09:33:36.497
71668
2020-11-02T09:33:36.497
71660
answer