2017-11-14 1 views
0

der Katalog gibt diese Werte:Wie zwei Spalten in CSV mit zwei zuvor in Python deklarierten Werten zu vergleichen?

0.6881 -55.0099 
0.6883 -80.3465 
0.7827 -59.5199 
0.8206 -54.5565 
0.8418 -49.7932 
0.9503 -43.6182 
1.0236 -52.9165 
1.0488 -50.6465 
1.1068 -50.6182 
1.134 -32.2499 
1.1325 -45.4482 
1.2633 -27.7416 
1.2725 -50.8282 
1.3115 -40.6049 
1.3461 -30.5649 
... 
... 

und vor ist ra erklärte meine Werte = 59,6517601 Dezember 61,5475502 =. Wie vergleiche ich, wenn dort Ra, Dez in meinem Katalog steht?

Antwort

1

Dank für die Hilfe meiner Frage und sorry für meine Verspätung zu beantworten, hier zu beantworten! Nun, ich finde eine einfache Lösung dafür. Ich arbeite mit Fit-Dateien.

catalogue = pd.read_csv('cat7.csv', delimiter=(',')) 
catalogue.columns = ['ra', 'dec'] 
df1 = catalogue[['ra','dec']] 

ra = [] 
dec = [] 

for r in df1['ra']: 
    ra.append(r) 

for d in df1['dec']: 
    dec.append(d) 

for filename in os.listdir('6df'): 
    print('reading file ' + filename) 
    if filename.endswith('.fits'): 
     hdulist = fits.open('6df/' + filename) 
     try: 
      ra1 = hdulist[2].header['ra'] 
      dec1 = hdulist[2].header['dec'] 


      for i in range(0, len(df1)): 
       if (int(ra1) == int(ra[i]) and int(dec1) == int(dec[i])): 
        shutil.copy('6df/' + filename, 'type/' + filename) 
        print(filename + ' copiado') 
        break 
     except: 
      shutil.copy('6df/' + filename, 'SEM_RA_DEC/' + filename) 
2

zuerst den Katalog in Python erstellen:

l = '0.6881 -55.0099 0.6883 -80.3465 0.7827 -59.5199 0.8206 -54.5565 0.8418 -49.7932 0.9503 -43.6182 1.0236 -52.9165 1.0488 -50.6465 1.1068 -50.6182 1.134 -32.2499 1.1325 -45.4482 1.2633 -27.7416 1.2725 -50.8282 1.3115 -40.6049 1.3461 -30.5649' 

l = l.replace(' ', ',') 
l = l.split(',') 
l = [float(a) for a in l] 

ra = 59.6517601 
dec = 61.5475502 

ra in l 
dec in l 

Beide Ausgang Falsch, so weder ra oder Dezember auf der Liste stehen. Stellen Sie sich vor ra war in der Liste, dann:

l.append(ra) 
ra in l 
True 
2

Vor allem, wenn die Dezimalstellen von ra und dec aus denen Ihrer Werte in CSV-Datei unterschiedlich sind, verwenden round() die Dezimalstellen zuerst zu beheben, dann wie folgt vorgehen

Aktion

mit Pandas:

import pandas 

ra = 59.6517601 
dec = 61.5475502 
pattern = [ra,dec] 

table = pandas.read_csv('file.csv') 
for ind,row in table.iterrows(): 
    if list(row.values)==pattern: 
     print('pattern was detected at index {}'.format(ind)) 

und ohne Pandas:

cnt = 0 

ra = 59.6517601 
dec = 61.5475502 
pattern = [ra,dec] 

with open('file.csv','r').read() as file: 
    for row in file.split('\n'): 
     x = [float(row.split(',')[0]),float(row.split(',')[1])] 
     if x==pattern: 
      print('pattern was detected at index {}'.format(cnt)) 
      break 
    cnt += 1 

nur daran erinnern, dass, wenn Sie in ValueError in der zweiten Lösung kommen, ist es wahrscheinlich wegen der split Verhalten für Text in Dateien, wo ein leeres Element am letzten Index der Liste erstellt wird. um den Fehler zu vermeiden, tun:

file = file[:-1] nach der with Syntax

Verwandte Themen