[]
python for loop sorunu
/data klasöründe 12 adet tif dosyam var. aşağıdaki adımları tek tek bütün tif dosyalarına uygulamak istiyorum.
- /data klasöründen bir tif dosyasını gr.from_file kodu ile aç
- tif verisini pandas dataframe'ine .to_pandas() komutu ile gönder
- oluşan pandas dataframe'i içinde adı column olan sütun adını tif dosya adı ile değiştir.
- sütun adı değiştirilen dataframe'i tif adı ile kaydet.
aşağıda verdiğim kod tif dosyalarına tek tek uygulanınca istediğim gibi çalışıyor.
import georasters as gr
import numpy as np
import pandas as pd
import os
import glob
Altitude = './data/Altitude.tif'
Altitude = gr.from_file(Altitude)
Altitude = Altitude.to_pandas()
Altitude = Altitude.rename(columns={"value":"Altitude"})
Altitude
Bu şekilde tif dosyalarına tek tek uygulamak çok kullanışsız olduğundan for loop ile aşağıdaki kodu derledim.
# assign directory
directory = 'data/'
for filename in os.listdir('data/'):
f = os.path.join(directory, filename)
# checking if it is a file
if os.path.isfile(f):
a = gr.from_file(f)
a = a.to_pandas()
a = a.rename(columns={'value':'a'})
print(a)
ancak bu döngü istediğim gibi çalışmıyor. kod 12 tif için de çalışıyor ancak sadece son tif'in verisini saklıyor. tif'in verisini de tif'in adıyla değil, a olarak saklıyor. yardımcı olabilecek birileri var mı?
- /data klasöründen bir tif dosyasını gr.from_file kodu ile aç
- tif verisini pandas dataframe'ine .to_pandas() komutu ile gönder
- oluşan pandas dataframe'i içinde adı column olan sütun adını tif dosya adı ile değiştir.
- sütun adı değiştirilen dataframe'i tif adı ile kaydet.
aşağıda verdiğim kod tif dosyalarına tek tek uygulanınca istediğim gibi çalışıyor.
import georasters as gr
import numpy as np
import pandas as pd
import os
import glob
Altitude = './data/Altitude.tif'
Altitude = gr.from_file(Altitude)
Altitude = Altitude.to_pandas()
Altitude = Altitude.rename(columns={"value":"Altitude"})
Altitude
Bu şekilde tif dosyalarına tek tek uygulamak çok kullanışsız olduğundan for loop ile aşağıdaki kodu derledim.
# assign directory
directory = 'data/'
for filename in os.listdir('data/'):
f = os.path.join(directory, filename)
# checking if it is a file
if os.path.isfile(f):
a = gr.from_file(f)
a = a.to_pandas()
a = a.rename(columns={'value':'a'})
print(a)
ancak bu döngü istediğim gibi çalışmıyor. kod 12 tif için de çalışıyor ancak sadece son tif'in verisini saklıyor. tif'in verisini de tif'in adıyla değil, a olarak saklıyor. yardımcı olabilecek birileri var mı?
print var ama sonucu save ettiğiniz kod yok gibi? dosyayı nasıl kaydediyorsunuz?
- plutongezegendegilmi (23.03.22 10:23:38)
@plutongezegendegilmi sanırım kaydetmiyorum (: nasıl yapabilirim?
- goddar (23.03.22 10:29:25)
Dökümantasyona göre:
a.to_tiff(f)
Bir de hocam "a" gibi değişken isimleri kullanmayın, anlamlı isimler kullanın. Aynı değişkeni kullanmak zorunda değilsiniz, yeni değişkenler kullanın uzun uzun. Performans falan tamam ama okunabilirlik de önemli :)
a.to_tiff(f)
Bir de hocam "a" gibi değişken isimleri kullanmayın, anlamlı isimler kullanın. Aynı değişkeni kullanmak zorunda değilsiniz, yeni değişkenler kullanın uzun uzun. Performans falan tamam ama okunabilirlik de önemli :)
- plutongezegendegilmi (23.03.22 10:54:11)
@kisa buradakiler işimi görmüyor gibi sanki.
@plutongezegendegilmi hocam zaten benim amacım her bir tif dosyasını pandas dataframe'ine okumak. daha sonra bütün dataframeleri birleştirip işlem yapacağım. sizin gönderdiğinizi eklersem şöyle olmuş olacak: tifi pandas dataframeine oku sonra pandas dataframini tife çevir. yani başladığım yere dönmüş oluyorum.
@plutongezegendegilmi hocam zaten benim amacım her bir tif dosyasını pandas dataframe'ine okumak. daha sonra bütün dataframeleri birleştirip işlem yapacağım. sizin gönderdiğinizi eklersem şöyle olmuş olacak: tifi pandas dataframeine oku sonra pandas dataframini tife çevir. yani başladığım yere dönmüş oluyorum.
- goddar (23.03.22 11:11:46)
@plutongezegendegilmi istediğmi yapan bir koda ulaşabilsem uzun uzun daha okunabilir hale getiririm (:
- goddar (23.03.22 11:12:30)
şu şekilde çözdüm arkadaşlar sağolun. ancak değişkenler değişebilir. değişken isimlerinin nasıl olması konusunda belli başlı kurallar ya da yaygın kullanımlar var mıdır?
# assign directory
directory = 'data/'
l=[]
for filename in os.listdir('data/'):
f = os.path.join(directory, filename)
cleanname = filename[0:-4]
if os.path.isfile(f):
a = gr.from_file(f)
a = a.to_pandas()
a = a.rename(columns={'value':cleanname})
l.append(a)
print(a)
# assign directory
directory = 'data/'
l=[]
for filename in os.listdir('data/'):
f = os.path.join(directory, filename)
cleanname = filename[0:-4]
if os.path.isfile(f):
a = gr.from_file(f)
a = a.to_pandas()
a = a.rename(columns={'value':cleanname})
l.append(a)
print(a)
- goddar (23.03.22 12:11:28)
1