[英]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
首先,如果ra
和dec
的小數位數與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.