import pandas as pd# Basit olarak csv okumapd.read_csv(<path_to_csv>)# Satırı atlayarak csv okumapd.read_csv(<path_to_csv>, skiprows=[1])# Başlangıç indeksi belirlemepd.read_csv(<path_to_csv>, index_col=0)# Başlıksız verileri okumapd.read_csv(<path_to_csv>, names=<list>, header=None)# Tab ile ayrılan verileri okumapd.read_csv(<path_to_tsv>, delimiter='\t')
Csv okuma yöntemleri ```py csv = [','.join(map(lambda x: str(x), row)) for row in np.vstack([df.columns, df])] with open('./data/read_csv_example.csv', 'w') as f: [f.write(line + '\n') for line in csv] !cat ./data/read_csv_example.csv ``` ![](../res/ex_ilkel_csv.png) ```py pd.read_csv('./data/read_csv_example.csv') ``` ![](../res/ex_pandas_read.png)
Verileri Filtreleme
Operatör
Açıklama
~
not
&
and
`
`
or
str.contains(<str>)
String'e göre filtreleme
df = pd.DataFrame()# Verinin en tepesini göstermedf.head()# Koşulun sağlandığı verileri almadf = df[df['state']=='AZ']# Eşsiz verileri almadf['state'].unique()# Birden fazla koşula göre alma# `()` kullanımlaıdır yoksa `&` işlemi beklendiği gibi çalışmazdf[(df['state']=='AZ') & (df['review_count']>10)].head()# Koşulun sonucuna göre `True - False` dizisi döndürür(yelp_df['state']=='AZ').head()(yelp_df['state']=='AZ').dtype # dtype('bool')# El ile seçme (1. indexteki elemanı almaz)df[[True,False,True]]# Bool değeri alan sütuna göre listeleme (open = {True | False})df[df['open']].head()# Açık olanları listelerdf[~df['open']].head()# Kapalı olanları listeler `~ = !`df[df['open'].fillna(False)].head()# Nan değerlerini false sayarak listeleme# Strig'e göre filtreleme (`vegas` içeren şehirleri alma)df = df[df['city'].str.contains('Vegas')]# Birden fazla değerde arama (regex aramasıdır. | veya demek)df = df[df['city'].str.contains('|'.join(opioids), case=False)# Listedeki elemanları içeriyor mu? (büyük-küçük harften bağımsız arama)df[df['column'].str.lower().isin([x.lower() for x in mylist])]
Fonksiyonlar ve Birleştirme İşlemleri
# Log hesaplaması (her veri için log alır)log_review_count = np.log(df['review_count'])# Ortalama hesaplama (tek değer döndürür)mean_review_count = yelp_df['review_count'].mean()# DB'ye fonksiyon uygulama (parametre olarak `df['attributes']` almak zorundadır)# True - False serisi döndürürdelivery_attr = df['attributes'].apply(<func_attr_dict>)
GroupBy Kullanımı
Belirli bir öğeye göre gruplar, çakışanlara verilen işlemi uygular.
Örn: max(), mean() gibi metodlarda en yüksek veya ortalama alınır
# Şehre göre birleştirme ve yıldızların ortalamasını almastars_by_city = yelp_df.groupby('city')['stars'].mean()# Şehre göre gruplayıp, çakışan verilerde birden fazla metod kullanma# Sırayla: Stars sütunu altında: ortalama, standart sapma, diğer sütunlarda toplam, miktaragg_by_city = yelp_df.groupby('city').agg({'stars': {'mean': 'mean', 'std': 'std'}, 'review_count': 'sum', 'business_id': 'count'})
# Birleştirilmiş sütunları ayırmanew_columns =map(lambdax: '_'.join(x),zip(agg_by_city.columns.get_level_values(0), agg_by_city.columns.get_level_values(1)))agg_by_city.columns = new_columnsagg_by_city.head()# Gruplanmış verileri index dict'ine çevirmedict_city = by_city.groups# Gruplanmış verilerden bir tanesini almaby_city.get_group('Anthem').head()
Sıralama İşlemleri
# Yıldızlara göre veriyi sıralamadf.sort_values('stars').head()# Bussiness_id'nin indexine göre sıralamadf.set_index('business_id').sort_index().head()# Post_code göre sıralayıp, ilk post_code'u almaunique_practices = practices.sort_values('post_code').groupby('code').first().reset_index()
Veri Kümelerinin Birleştirilmesi
# Şehir ve bölge olarak verileir ayırmacensus['city']= census['GEO.display-label'].apply(lambdax: x.split(', ')[0])census['state']= census['GEO.display-label'].apply(lambdax: x.split(', ')[2])# Bölge isiimlerini değiştirmestate_abbr =dict(zip(census['state'].unique(), <list>))census['state']= census['state'].replace(state_abbr)# ('town', 'village' gibi terimlerin olduğu son kelimeyi kaldırma)census['city']= census['city'].apply(lambdax: ' '.join(x.split(' ')[:-1]))
# State ve city verilerine göre birleştirme (inner-join)merged_df = yelp_df.merge(census, on=['state', 'city'])merged_df = yelp_df.merge(census, on=['state', 'city'], how='left')# Left-join# Veri kümelerini birleştirme (ucuna eklenir)nov = pd.concat([nov18, nov11])nov['DATE'].unique()# Eklenmeyi kontrol etme# Şehirdeki toplam iş'leri bulmacity_counts = yelp_df.groupby('city')['business_id'].count().rename('city_counts')# Bulunan satırı tablonun sonuna sütun olarak ekleme# Önce indexler aynı yapılır, sonra index'e göre concat edilir, sonra index sıfırlanırpd.concat([yelp_df.set_index('city'), city_counts], axis=1, join='inner').reset_index()
Dataset ![](../res/city_dataset_ex.png)
Zaman Serileri ile Çalışma
# HTML'den veri almapop_growth = pd.read_html('https://web.archive.org/web/20170127165708/https://www.census.gov/population/international/data/worldpop/table_population.php', attrs={'class': 'query_table'}, parse_dates=[0])[0]
# null verilerini kaldırmapop_growth.dropna(inplace=True)# İndeksi yıla göre ayarlarsak, `resample` metodunu kullanabilirizpop_growth.set_index('Year', inplace=True)# 10 yıllık olarak indexleniyor ve 10 yıllık ortalama listenecek# İstersek mean, median, sum, last ve first de kullanıabilriizpop_growth.resample('10AS').mean()# Kayıp veriler için ototmatik tamamlama yapma# bfill() backward filling, ffill() forward filling (1Q 1. çeyrek demek (çeyrek yıl))pop_growth.resample('1Q').bfill()pop_growth.resample('1Q').ffill()
Pandas Zaman Değişkeni (Timestamp)
print(pd.Timestamp('January 8, 2017'))print(pd.Timestamp('01/08/17 20:13'))print(pd.Timestamp(1.4839*10**18))# Zamanlar arasında çıkartma yapılabilir (191 days 09:16:00)print(pd.Timestamp('Feb. 11 2016 2:30 am') - pd.Timestamp('2015-08-03 5:14 pm'))# Zamanlar arasında gelişmiş hesaplamalarfrom pandas.tseries.offsets import BDay, Day, BMonthEndprint(pd.Timestamp('January 9, 2017') -Day(4))# Günprint(pd.Timestamp('January 9, 2017') -BDay(4))# İş günü (Business day)print(pd.Timestamp('January 9, 2017') +BMonthEnd(4))# Aydaki iş bitiş günü# Zaman aralıkları oluşturma (8 güner arayla zaman oluşturma)pd.date_range(start='1/8/2017', end='3/2/2017', freq='B')# Python datetime ile uyumludurimport datetimepd.Timestamp('May 1, 2017')- datetime.datetime(2017, 1, 8)# Timedelta('113 days 00:00:00')
Pandas ile Görselleştirme
# 30 çubuklu histogram ile çizmeyelp_df['review_count'].apply(np.log).hist(bins=30)# Çizgi grafiği çizdirmepop_growth['Annual Growth Rate (%)'].plot()