簡體   English   中英

如何將csv中的兩列與之前在python中聲明的兩個值進行比較?

[英]How to compare two columns in csv with two values declared before in python?

目錄中有此值:

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
...
...

我之前聲明的值是ra = 59.6517601 dec = 61.5475502。 如何比較以顯示目錄中的值ra,dec?

首先在python中創建目錄:

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

兩者都輸出False,因此ra或dec都不在列表中。 想象一下ra在列表中,然后:

l.append(ra)
ra in l
True

首先,如果radec的小數位數與csv文件中的值不同,請先使用round()修復小數位數,然后執行以下操作

使用熊貓

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))

沒有大熊貓:

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

只要記住,如果您在第二種解決方案中遇到ValueError ,則可能是由於文件中文本的split行為所致,其中文件的文本在列表的最后一個索引處創建。 為避免該錯誤,請執行以下操作:

file = file[:-1]with語法之后

感謝您為回答我的問題所提供的幫助,並感謝您延遲在此處回答! 好吧,我為此找到了一個簡單的解決方案。 我正在使用擬合文件。

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM