Python Pandas ile Aynı Anda Birden Fazla CSV Dosyasını Okumak
Bazen bir dizin içindeki tüm csv uzantılı dosyaları okuyup tek bir dataframe yapmak isteyebiliriz. Apache Spark bunu rahatlıkla yapabilirken pandas read_csv bunu tek başına yapamıyor maalesef. Basit okumada mutlaka csv uzantılı dosya ismini belirtmemiz gerekiyor. Aşağıda dosya ismini belirtmeden bir dizindeki csv dosyalarını okuyup tek bir pandas dataframe yapma ile ilgili bir örnek paylaşacağım. Ancak burada csv dosyalarının aynı formata sahip olması gereklidir. Eğer farklı formatta dosyalar varsa bunları tek bir dataframe içinde toplayamayız. Bu durumda bir sonraki başlıkta bahsedilen yöntemi kullanmalısınız.
import pandas as pd import glob
all_data = pd.DataFrame() for f in glob.glob("dizin\*.csv"): df = pd.read_csv(f,sep=",") all_data = all_data.append(df,ignore_index=True)
Bir dizinde bulunan csv dosyalarının her birini farklı bir dataframe içinde tutma
Şayet dizin içindeki dosyaların şemaları aynı değil ise hepsini okuyup farklı farklı dataframe’lere atamamız gerekir. Aşağıda bununla ilgili bir örneği göreceksiniz. Her bir csv dosyanın ismini anahtar yaparak tüm dosyaları dataframe halinde python dictionary içinde topluyor. Bundan sonra dilerseniz istediğinizi bağımsız bir isme atayıp sözlük dışında kullanabilirsiniz.
import os # csv dosyaları different_csvs içinde directory_in_str = os.getcwd()+"\\different_csvs" print(directory_in_str) Çıktısı: 'D:\\egitim\\verilen\\vbo_blog\\erkan\\read-csvs-in-a-folder\\different_csvs'
Dizinde ne var ne yok bir bakalım. Csv dosyalarını adlarıyla listeleyelim.
directory = os.fsencode(directory_in_str) for file in os.listdir(directory): filename = os.fsdecode(file) print(filename) Çıktısı: Churn_Modelling.csv healthcare_insurance.csv iris.csv Kidem_ve_Maas_VeriSeti.csv
Dizinde dört farklı csv dosyası olduğunu anlıyoruz. Şimdi dizinde ne kadar csv dosyası varsa anahtarları dosya ismi olacak şekilde okuyup python dictionary içine koyalım.
directory = os.fsencode(directory_in_str) dfs_dict = {} for file in os.listdir(directory): filename = os.fsdecode(file) key = filename.replace(".csv","") dfs_dict[key] = pd.read_csv(directory_in_str+"\\"+filename)
Kontrol edelim okunmuş mu?
dfs_dict['Churn_Modelling'].head()
RowNumber | CustomerId | Surname | CreditScore | Geography | Gender | Age | Tenure | Balance | NumOfProducts | HasCrCard | IsActiveMember | EstimatedSalary | Exited | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 15634602 | Hargrave | 619 | France | Female | 42 | 2 | 0.00 | 1 | 1 | 1 | 101348.88 | 1 |
1 | 2 | 15647311 | Hill | 608 | Spain | Female | 41 | 1 | 83807.86 | 1 | 0 | 1 | 112542.58 | 0 |
2 | 3 | 15619304 | Onio | 502 | France | Female | 42 | 8 | 159660.80 | 3 | 1 | 0 | 113931.57 | 1 |
3 | 4 | 15701354 | Boni | 699 | France | Female | 39 | 1 | 0.00 | 2 | 0 | 0 | 93826.63 | 0 |
4 | 5 | 15737888 | Mitchell | 850 | Spain | Female | 43 | 2 | 125510.82 | 1 | 1 | 1 | 79084.10 | 0 |
dfs_dict['healthcare_insurance'].head()
age | sex | bmi | children | smoker | region | charges | |
---|---|---|---|---|---|---|---|
0 | 19 | female | 27.900 | 0 | yes | southwest | 16884.92400 |
1 | 18 | male | 33.770 | 1 | no | southeast | 1725.55230 |
2 | 28 | male | 33.000 | 3 | no | southeast | 4449.46200 |
3 | 33 | male | 22.705 | 0 | no | northwest | 21984.47061 |
4 | 32 | male | 28.880 | 0 | no | northwest | 3866.85520 |
Kaynak dosya ve kodlar için tıklayınız
Umarım faydalı bir örnek olmuştur. Hoşçakalın.
Hocam Elinize sağlık güzel bilgi vermişsiniz. Peki bu dosyaları yine topluca okuyup ayrı ayrı dataframelere yazmak istersek ne yapmamız lazım? mesela;
df1= ilk.csv
df2=ikinci.csv
Merhaba. Sorduğunuz husus yazıya eklenmiştir. Umarım işinizi görür.
Hocam, öncelikle hızlı dönüşünüz ve ilginiz için çok teşekkür ederim. Eklediğiniz kısım çok işime yaradı. Onun için de ayrıca teşekkür ediyorum. İyi çalışmalar,
Güzel yazı emeğinize sağlık.