pandas ile sütunlara arasında işlem yapmam gerekiyor ancak sütunları ve eval fonksiyonunda bulunan textleri kullanıcıdan alacağım. nasıl yapacağım ile ilgili bir yöntem bakıyorum.
örnek kod ile göstereyim
import pandas as pd
data = {
"Wo men": [125, 230, 412],
"Men": [219, 185, 452]
}
df = pd.DataFrame(data)
# kullanıcı kullanacağı sütunları seçecek bende sütünlarla aşağıdaki gibi bir sozluk oluşturacağım.
d = {'A': 'Wo men', 'B': 'Men'}
# kullanıcı eval için text yazacak
t = "A + B"
d şu şekilde oluşacak
KEYS = list('ABCDEFGHIJKLMNOPQRSTUVWXYZ')
d = dict(zip(KEYS,list(v.title for v in KULLANICININ_SEÇTİĞİ_OBJELER)))
# her sütun için oluşturulmuş bir obje var ve v.title sütun başlığına eşit
şu ifade düzgün çalışıyor:
print(pd.eval('df[A] + df[B]', engine='python', local_dict=d))
ama ben ilk parametreyi “A + B” şeklinde vermek istiyorum. df üzerinden fonksiyonu çağırdım. ama böyle olunca local dict gönderemiyorum.
print(df.eval("A + B", engine='python', local_dict=d))
şu yöntem bir çözüm gibi görünüyor; ancak pek sevimli görünmüyor.
t = "A + B"
for letter in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ':
t2 = t2.replace(letter, f"df[{letter}]")
print(pd.eval(t, engine='python', local_dict=d))
soru: ne yapmalıyım? bu işin best practice’i nedir?
işlemi belirli bir dataframe için yapmıyorum; dolayısıyla farklı başlıklar gelebilir. içinde space, *, (, }
barındırabilir.