特定の行を消してたいです💦
解決したいこと
5523行ごとに出てくる行を消したいです!
5522ステップ分あるデータの名前としてあるのですが,
計算上不要なので消したいです!
写真にあるような不要な行が,5523行目ごとに計1000個分あります!
これを消す方法を助言して頂けたら,幸いです!
お忙しい中,すみませんがよろしくお願いします!💦
0 likes
5523行ごとに出てくる行を消したいです!
5522ステップ分あるデータの名前としてあるのですが,
計算上不要なので消したいです!
写真にあるような不要な行が,5523行目ごとに計1000個分あります!
これを消す方法を助言して頂けたら,幸いです!
お忙しい中,すみませんがよろしくお願いします!💦
行を空白文字区切りでデータ化して、初列の数値が5522
以下の行だけ残せば良いのではないでしょうか?
コードを見せていただければ、より詳しいお話ができると思います。
import pandas as pd
data = pd.DataFrame({'key':[5520, 5521, 5522, 29860000, 1, 2, 3, 4, 5], 'a':[1,2,3,5522,1,2,3,4,5], 'b':[300, 300, 200, 1956, 250, 200, 200, 250, 300]})
print(f"元\n{data}\n")
data = data[data['key'] <= 5522]
print(f"新\n{data}")```
元
key a b
0 5520 1 300
1 5521 2 300
2 5522 3 200
3 29860000 5522 1956
4 1 1 250
5 2 2 200
6 3 3 200
7 4 4 250
8 5 5 300
新
key a b
0 5520 1 300
1 5521 2 300
2 5522 3 200
4 1 1 250
5 2 2 200
6 3 3 200
7 4 4 250
8 5 5 300
import numpy as np
data = np.array([
[ 5520, 1, 300],
[ 5521, 2, 300],
[ 5522, 3, 200],
[29860000, 5522, 1956],
[ 1, 1, 250],
[ 2, 2, 200],
[ 3, 3, 200],
[ 4, 4, 250],
[ 5, 5, 300],
])
print(f"元\n{data}\n")
data = np.delete(data, np.where(data > 5522)[0], axis=0)
print(f"新\n{data}")
元
[[ 5520 1 300]
[ 5521 2 300]
[ 5522 3 200]
[29860000 5522 1956]
[ 1 1 250]
[ 2 2 200]
[ 3 3 200]
[ 4 4 250]
[ 5 5 300]]
新
[[5520 1 300]
[5521 2 300]
[5522 3 200]
[ 1 1 250]
[ 2 2 200]
[ 3 3 200]
[ 4 4 250]
[ 5 5 300]]
import numpy as np
data = np.loadtxt('rv5')
print(f"元\n{data}\n")
data = np.delete(data, np.where(data > 5522)[0], axis=0)
print(f"新\n{data}")
5520 1 300
5521 2 300
5522 3 200
29860000 5522 1956
1 1 250
2 2 200
3 3 200
4 4 250
5 5 300
元
[[5.520e+03 1.000e+00 3.000e+02]
[5.521e+03 2.000e+00 3.000e+02]
[5.522e+03 3.000e+00 2.000e+02]
[2.986e+07 5.522e+03 1.956e+03]
[1.000e+00 1.000e+00 2.500e+02]
[2.000e+00 2.000e+00 2.000e+02]
[3.000e+00 3.000e+00 2.000e+02]
[4.000e+00 4.000e+00 2.500e+02]
[5.000e+00 5.000e+00 3.000e+02]]
新
[[5.520e+03 1.000e+00 3.000e+02]
[5.521e+03 2.000e+00 3.000e+02]
[5.522e+03 3.000e+00 2.000e+02]
[1.000e+00 1.000e+00 2.500e+02]
[2.000e+00 2.000e+00 2.000e+02]
[3.000e+00 3.000e+00 2.000e+02]
[4.000e+00 4.000e+00 2.500e+02]
[5.000e+00 5.000e+00 3.000e+02]]
loadtxt
は、列数が揃っていないと使えないようです。
《冗長でしたので削除しました》
もっと単純に書けました。
import numpy as np
# 空白文字区切りで列数が3より大きい行だけをfloat配列へ読み込む
file = open('rv5')
data = [x for x in map(lambda x: list(map(float, x.strip().split(' '))), file) if len(x) > 3]
file.close()
# NumPy化
data = np.array(data)
print(data")
5520 1 300 1
5521 2 300 2
5522 3 200 3
29860000 5522 1956
1 1 250 4
2 2 200 5
3 3 200 6
4 4 250 7
5 5 300 8
[[5.520e+03 1.000e+00 3.000e+02 1.000e+00]
[5.521e+03 2.000e+00 3.000e+02 2.000e+00]
[5.522e+03 3.000e+00 2.000e+02 3.000e+00]
[1.000e+00 1.000e+00 2.500e+02 4.000e+00]
[2.000e+00 2.000e+00 2.000e+02 5.000e+00]
[3.000e+00 3.000e+00 2.000e+02 6.000e+00]
[4.000e+00 4.000e+00 2.500e+02 7.000e+00]
[5.000e+00 5.000e+00 3.000e+02 8.000e+00]]
@taki04
Questioner
@taki04
Questioner
@taki04
Questioner
@taki04
Questioner
@taki04
Questioner
@taki04
Questioner
Pandasで読み込んでからなんとかするのではなく、データを別のスクリプトで前処理する方法はどうでしょうか。見たところ
ようなので、
def extract(source_file_name, dest_file_name):
with open(source_file_name, mode="r") as source:
with open(dest_file_name, mode="w") as dest:
for line in source:
if line != "" and line[0] == " ":
dest.write(line)
のように簡単に書けそうです。
WindowsならPowerShellを使う手もありますがとっつきにくいと思うのでやめます。Linux(WSL)ならgrepコマンドで一発ですね。
$ grep -E "^ " source.txt > dest.txt
@taki04
Questioner