[这是我的第一篇文章,我不太喜欢编程和python。希望我能描述一下,请耐心等待:)
为了学习,我使用jupyter笔记本(numpy熊猫等)来处理和绘制我的数据。在这里,它与X射线束和Geiger-Müller计数器有关。看起来像这样:
# loading my txt
data1_1_KBr = pd.read_csv("1_1_SpektrumCuKBr_Daten.txt",skiprows=2,usecols=[0,1],
names=["Winkel1_1_KBr","Rate1_1_KBr"],delimiter="\t",decimal=",")
#putting into dataframe
df1_1_KBr = pd.DataFrame(data1_1_KBr,columns=["Winkel1_1_KBr","Rate1_1_KBr"])
#this is the correction of my values
N_1_1_KBr = (df1_1_KBr.Rate1_1_KBr/(1-T*df1_1_KBr.Rate1_1_KBr))
更正仅适用于“ Rate1_1_KBr”的较高值。
处理后的数据应该是熊猫数据框或类似数据的数组,看起来就像我的原始数据一样,但条目已更正。
我尝试编写循环,但失败了。
应该是这样的(没有代码只是想法):
如果“ Rate1_1_KBr”的值小于200,则将其放入我的新数据帧中;如果“ Rate1_1_KBr”的值大于200,则将其进行校正并随后将其放入新数据框中。
如果有人像我这样的初学者得到很好的解释,那会很棒:)
我不确定您是否熟悉numpy,但是可以以相同的方式对数据框使用索引。另外,代码的第二行是多余的,因为pd.read_csv
返回了数据帧本身。因此,您想要的代码如下所示:
df1_1_KBr = pd.read_csv("1_1_SpektrumCuKBr_Daten.txt",skiprows=2,usecols=[0,1],
names=["Winkel1_1_KBr","Rate1_1_KBr"],delimiter="\t",decimal=",")
correction_df = df1_1_KBr[df1_1_KBr.Rate1_1_KBr>200]
N_1_1_KBr = df1_1_KBr.copy()
N_1_1_KBr[correction_df.index, 'Rate1_1_KBr'] = (correction_df.Rate1_1_KBr/(1-T*correction_df.Rate1_1_KBr))
请注意,不需要使用apply
,因为它比用这种方法建立索引慢得多。
也不确定T
是恒定值还是数据帧的一部分。如果是前者,则此代码应该有效。
欢迎丹尼斯,
def proc_rate(rate, threshold, T):
if rate<threshold:
return rate
else:
return (rate/(1-T*rate))
ans = df1_1_KBr.Rate1_1_KBr.apply(proc_rate, threshold=200, T=T)
如果您想将系列写回到原始数据框中:
df1_1_KBr.loc[:, 'Rate1_1_KBr'] = df1_1_KBr.Rate1_1_KBr.apply(proc_rate, threshold=200, T=T)
您还可以过滤比率,然后应用校正方法:
sub_frame = df1_1_KBr.Rate1_1_KBr[df1_1_KBr.Rate1_1_KBr<200].apply(proc_rate, threshold=200, T=T)