处理条件的数据帧-python jupyter notebook

问题描述 投票:0回答:2

[这是我的第一篇文章,我不太喜欢编程和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,则将其进行校正并随后将其放入新数据框中。

如果有人像我这样的初学者得到很好的解释,那会很棒:)

python pandas dataframe jupyter-notebook physics
2个回答
2
投票

我不确定您是否熟悉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是恒定值还是数据帧的一部分。如果是前者,则此代码应该有效。


1
投票

欢迎丹尼斯,

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)
© www.soinside.com 2019 - 2024. All rights reserved.