Ето няколко примера за моите данни, преди да започна да обяснявам.
PP04-O3N2SNpos log(O/H) + 12 positive error! negative error! nuclear metallicity NED calculated virgo infall distance in Kpc
9.04 0.24 -0.09 - -
8.76 0.17 -0.02 - 4.61
8.92 0.04 -0.04 9.03 2.97297
9.22 0.04 -0.04 - 8.24493
8.78 0.44 -0.24 9.23 10.25775
8.96 0.07 -0.2 9.05 7.2698
8.78 0.03 -0.03 8.48 2.02958
Така че PP04 е металичността на изчисленото от NED разстояние от центъра, а ядрената металичност е металността в центъра. Опитвам се да разбера дали има някакво уравнение, че ако знаех ядрената металичност и разстоянието от центъра, бих могъл да разбера PP04. Ще изглежда така:
'PP04' - 'nuclear metallicity' = distance * gradient
където градиентът е това, което търся.
За да направя това, написах код, който да пасне на всички данни, така че ядрената металичност да е нула и след това мога да реша за градиент и да начертая данните в графика, но имам няколко проблема с моя код.
import matplotlib.pyplot as plt
import pandas as pd
from pandas import *
from matplotlib import *
import traceback
import numpy as np
#import data into a pandas dataframe called df
df = pd.DataFrame.from_csv('Combined data.csv')
df = df.dropna()
#drop the nulls
print df
y = df['PP04-O3N2SNpos log(O/H)+12'] - df['nuclear metallicity']
yerr = np.array([(df['negative error!'],df['positive error!'])]).T
x = df['NED calculated virgo infall distance in Kpc']
intercept, gradient = np.polyfit(x,y,1)
print(intercept,gradient)
#to make a graph using the data
plt.errorbar(x,y,yerr,fmt = 'r-')
plt.xlabel('Distance from center in kpc')
plt.ylabel('PP04-O3N2SNpos log(O/H)+12')
plt.title('Central metallicity vs SN metallicity')
plt.show()
Друга грешка, която получавам
TypeError: cannot concatenate 'str' and 'float' objects
Наистина съм нов в Python, така че съм сигурен, че има и други неща, които не са наред с кода ми и ако можете да помогнете и с това, ще бъда оценен. Не съм сигурен дали начинът, по който написах изобразяването на данните, е правилен, но не мога да проверя с другите грешки. Моля, уведомете ме, ако имате нужда от повече информация и благодаря предварително за помощта.
РЕДАКТИРАНЕ: Използвах помощта по-долу, за да променя кода си, така че сега го използвам
pd.read_csv('Combined data.csv').dtypes
pd.read_csv('Combined data.csv',na_values = '-').dtypes
df = pd.read_csv('Combined data.csv',na_values = '-')
Но сега получавам грешката
TypeError: unsupported operand type(s) for -: 'float' and 'str'
Ето обратното проследяване.
KeyError
не се случва, когато получите обратното проследяване, показано по-горе, така че това означава, че сте сортирали каквото и да го е причинило. Може би ще има смисъл да го премахнете от въпроса. 2) Грешката изглежда предполага, че вашиятx
масив съдържа низове, а не плаващи числа. Проверете типа в последната колона и конвертирайте, ако е необходимо. - person Lev Levitsky   schedule 07.08.2015pandas
да преобразува колоната в плаващи. Опитайте да използвате параметъраna_values
наread_csv
. - person Lev Levitsky   schedule 07.08.2015df.columns
, за да видите дали има празно пространство в имената на колоните или нещо подобно. - person Lev Levitsky   schedule 07.08.2015na_values
. Няма смисъл да се прави в сценарий. 2) Отпечатайтеdf.dtypes
и вижте какво става. Ядрената металичност (вероятно) все още не е плаваща. Опитайте да го отпечатате, за да намерите причината, може би там има другиna_values
. - person Lev Levitsky   schedule 07.08.2015