Python Pandas DataFrame iki sütun arasında işlem yapma

Merhaba, pandas ile csv dosyamı çektirip boşluk olan satırları sildirerek verimi indirgedim. Csv dosyamda iki sütun arasında çıkarma işlemleri yaptırarak matplotlib ile scatter grafiği çizdireceğim fakat
unsupported operand type(s) for -: ‘str’ and ‘str’
hatası alıyorum düzeltme konusunda yardımcı olabilirmisiniz

df = pd.read_csv('asu.csv',sep=',')
df = df.replace(r'^\s*$', np.nan, regex=True)
df=df.dropna()

image

Merhaba, hata veren kodu paylaşmamışsınız ama hangi 2 sütun ile işlem yapmak üzereyseniz, o iki sütundaki değerlerin nümerik değil string tipinde olduğunu söylüyor. Normalde read_csv tespit edip nümerik yapardı o sütunların tiplerini; dolayısıyla bunu engelleyen bir veya birden fazla nümerik yapılamayan veri var o sütunlarda diye anlıyoruz.

Bu aykırı değerlerin ne olduğunu merak ediyorsanız:

aykiri_mask = pd.to_numeric(df[sutun_1], errors="coerce").isna()
print(df.loc[aykiri_mask, sutun_1])
  • pd.to_numeric verilen serideki değerleri nümerik yapmaya çalışır.
  • yapamadığı değere rastladığı anda normalde hata verir; errors="coerce" ile bu davranışı değiştiriyor, o aykırı değerlere NaN koysun istiyoruz.
  • sonra .isna() ile True/False’dan müteşekkil bir seri elde ederiz: isna NaN’lığı ölçtüğünden, sonunda eğer aykırıysa True değilse False değerlerini gördüğümüz bir seridir.
  • sonra bununla satırları filtreliyoruz (.loc'un ilk indeksleyeni), sütunu da sutun_1 diye seçerek ilgili sütundaki yalnız aykırı yani nümerikleştirilemeyen değerlerin kaldığı (filtrelendiği) bir seri elde ediyoruz.
  • sonra da onu yazdırıyoruz.

( sutun_1 ilgili sütunlardan birinin ismi; aynı kodu sutun_2 için de çalıştırabilirsiniz.)

Hocam kodlar aşağıdakiler tabloda bulunan SPg ve SPv sütunlarını birbirinden çıkartmak istiyorum


Anladım. Boş satırlardan dolayı onlar “object” veri tipinde kalmış galiba, sonradan onları kaldırmışsınız ama veri tipi değişmiyor. Son kodu “SPv” için çalıştırıp onda da aykırı veri olmadığını görürseniz, df.SPg = df.SPg.astype(float) ve df.SPv = df.SPv.astype(float) deyip veri tiplerini sayıya çevirdikten sonra deneyebilirsiniz çıkarma işlemini.

2 Beğeni