Фильтрация данных из большого CSV - PullRequest
0 голосов
/ 27 июня 2018

У меня большой файл данных, и меня интересуют только строки с конкретными значениями x 4.125, как показано ниже. Теперь, поскольку значение 4.125 относится к позиции остановки иона, соответствующая начальная позиция также представляет интерес для меня, и я хочу сохранить эту информацию в массиве.

Как мне написать программу, которая эффективно находит позицию остановки x в 4.125 и сохраняет позицию запуска иона?

Это массив 120982 * 9, и в приведенном ниже примере мне было бы интересно сохранить информацию об ионе # 3849096.

"Ion N","Mass","Charge","X","Y","Z","Azm","Elv","KE" 
3849094,0.00054858,-1,66.5216,-51,-3.8,-180,88.7,18160
3849094,0.00054858,-1,27.3925,30.3532,-4.07076,-177.1,41.5494,17697.2 
3849095,0.00054858,-1,66.5216,-51,-3.7,-180,88.7,18160
3849095,0.00054858,-1,26.6277,31.0039,-3.91402,-177.096,40.8293,17699.4
3849096,0.00054858,-1,66.5216,-51,-3.6,-180,88.7,18160
3849096,0.00054858,-1,4.125,44.9887,-2.47517,-176.363,25.715,17711.1

Это код, который я разработал до сих пор, но не работает:

import pandas as pd 
import numpy as np

opts = pd.read_csv('Ambre_2.dat',sep = ',', low_memory = False)
df = pd.DataFrame(opts)

X = df.iloc[:,3]
IonN = df.iloc[:,0]
tol = 1e-6
Fltr = 4.125

filterreddata = df[abs(df['X'] - Fltr) < tol]
filteredions = df[np.in1d(df['Ion N'], filterreddata['Ion N'])]
filteredions[2:2:end, :] = []
f = open('ions.csv', 'w')
f.write(tabulate(filteredions))
f.close()

Файл ion.csv должен выглядеть следующим образом:

"Ion N","Mass","Charge","X","Y","Z","Azm","Elv","KE" 
348450  0.00054858  -1  50.2216 -41 0.9 0   88.1    9200
348451  0.00054858  -1  50.3216 -41 0.9 0   88.1    9200 
348511  0.00054858  -1  50.2216 -41 1   0   88.1    9200
348512  0.00054858  -1  50.3216 -41 1   0   88.1    9200
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...