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()
 RowNumberCustomerIdSurnameCreditScoreGeographyGenderAgeTenureBalanceNumOfProductsHasCrCardIsActiveMemberEstimatedSalaryExited
0115634602Hargrave619FranceFemale4220.00111101348.881
1215647311Hill608SpainFemale41183807.86101112542.580
2315619304Onio502FranceFemale428159660.80310113931.571
3415701354Boni699FranceFemale3910.0020093826.630
4515737888Mitchell850SpainFemale432125510.8211179084.100
dfs_dict['healthcare_insurance'].head()
 agesexbmichildrensmokerregioncharges
019female27.9000yessouthwest16884.92400
118male33.7701nosoutheast1725.55230
228male33.0003nosoutheast4449.46200
333male22.7050nonorthwest21984.47061
432male28.8800nonorthwest3866.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 174 yazı
Erkan ŞİRİN
Erkan ŞİRİN
10 yılı aşkın süredir yurtiçi ve yurtdışında sektörde büyük veri mühendisliği, platform yönetimi ve makine öğrenmesi ile ilgili çalışmalar yürütmekte ve aynı zamanda birçok kurum ve şirkete danışmanlık ve eğitimler vermektedir. Çalışma alanları: Data ve MLOps platformları, gerçek zamanlı veri işleme, değişen veriyi yakalama (CDC) ve Lakehouse.
Yorumlar (4 yorum)
Hamza
Hamza Yanıtla
- 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 Yanıtla
    - 22:32

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

      Hamza
      Hamza Yanıtla
      - 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 Yanıtla
- 23:34

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

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

×

Bir Şeyler Ara