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.

Yazar Hakkında
Toplam 147 yazı
Erkan ŞİRİN
Erkan ŞİRİN
2014'ten beri hem akademik alanda hem de sektörde pratik anlamda büyük veri ve veri bilimi ile ilgili çalışmalar yürütmektedir. Büyük veri ve veri bilimi ile ilgili birçok kurum ve şirkete danışmanlık ve eğitimler vermekte, projeler icra etmektedir. Çalışma alanları: büyük veri platformlarının kurulum ve yönetimi, büyük veri üzerinde makine öğrenmesi, olağan dışılık ve sahtecilik tespiti, akan veri işleme ve veri hazırlama sürecidir.
Yorumlar (4 yorum)
Hamza
Hamza Cevapla
- 17:02

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

    Erkan ŞİRİN
    Erkan ŞİRİN Cevapla
    - 22:32

    Merhaba. Sorduğunuz husus yazıya eklenmiştir. Umarım işinizi görür.

      Hamza
      Hamza Cevapla
      - 01:59

      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,

Hakan
Hakan Cevapla
- 23:34

Güzel yazı emeğinize sağlık.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

×

Bir Şeyler Ara