Обработка моих данных с условиями - python jupyter notebook - PullRequest
0 голосов
/ 06 января 2020

Это мой первый пост, и я не столько в программировании и python. Надеюсь, что я смогу это описать, будьте терпеливы со мной:)

Для своих исследований я использую блокнот jupyter (numpy pandas et c.) Для обработки и печати моих данных. Здесь это как-то связано с рентгеновскими лучами и счетчиком Гейгера-Мюллера. Выглядит это так:

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

Обработанные данные должны быть в виде панды или массива, подобного данным, которые выглядят одинаково как мои оригинальные данные с записями, которые исправлены.

Я пытался написать l oop, и мне это не удалось.

Должно быть что-то вроде этого (без кода, только мысли):

Если значения «Rate1_1_KBr» меньше 200, затем поместите их в мой новый фрейм данных, если значения «Rate1_1_KBr» больше 200, обработайте их с моим исправлением и затем поместите их в мой новый фрейм данных.

Было бы здорово, если кто-то получил хорошее объяснение для начинающего, как я:)

Ответы [ 2 ]

2 голосов
/ 06 января 2020

Я не уверен, знакомы ли вы с 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 голос
/ 06 января 2020

Добро пожаловать, Деннис,

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...