2015-09-15 35 views
21

Bir excel dosyasını pandas.read_excel() işleviyle bir panda veri karesine içe aktarıyorum.Python pandas: Bir Excel dosyasını okurken veri türleri nasıl belirlenir?

Sütunlardan biri tablonun birincil anahtarıdır: tüm sayılardır, ancak metin olarak depolanır (Excel hücrelerinin sol üst kısmındaki küçük yeşil üçgen bunu doğrular). Bununla birlikte, dosyayı bir panda veri karesine içe aktardığımda, sütun bir kayan nokta olarak içe aktarılır. Üste | Bu, örneğin, '0614' 'ün 614 olduğunu gösterir.

Bir sütunu içe aktarırken veri türünü belirtmenin bir yolu var mı? Bunun, CSV dosyalarını içe aktarırken mümkün olduğunu ancak read_excel() sözdiziminde bir şey bulamadığını anlıyorum.

Düşünebildiğim tek çözüm, metnin metne aktarıldığından emin olmak için metnin başına ('0614'ü' A0614'e dönüştürmek ') metnin başına bir rasgele harf eklemektir. python'da 'A', böylece SQL'den içe aktardığım diğer tablolarla eşleştirebilirim.

cevap

39

Sadece dönüştürücüler belirtin. "Yaş" sütun dizeleri olarak biçimlendirilir

names ages 
bob  05 
tom  4 
suzy 3 

: Ben şu yapısının bir excel tablo oluşturdu. Yük için:

import pandas as pd 

df = pd.read_excel('Book1.xlsx',sheetname='Sheet1',header=0,converters={'names':str,'ages':str}) 
>>> df 
     names ages 
    0 bob 05 
    1 tom 4 
    2 suzy 3 
+0

'Dönüştürücüler' sütununa uygulanacak bir işlev belirtmişti. Açıkçası yanılıyordum - bunu işaret ettiğin için teşekkürler, çok kullanışlı! –

+1

İzin verilen dönüştürücü işlevlerinin listesini nerede bulabilirim? Burada str 'var, ama muhtemelen' int 've bir kaç tane daha var - mümkün olan olası dönüştürücü fonksiyonlarını listeleyen kaynak dokümanlar için bir bağlantı var mı? –

+1

Ben de bir liste bulamadım. "Dönüştürücüler" fonksiyonları kabul ettiğinden, "dönüştürücüler" işlevinin sınırları içinde kaldığınızdan (yani yalnızca bir giriş değişkeni gerektiren işlevleri kullanmak üzere tasarlandı), hayal gücünüzün sınır olduğunu sanıyorum. – tnknepp

8

read_excel() fonksiyonu belirli sütunlarında girişine fonksiyonlarını uygulayabilir bir dönüştürücüler parametreye sahiptir. Bunları dizeler olarak tutmak için kullanabilirsiniz. Documentation: Belirli sütunlarındaki değerleri dönüştürmek için fonksiyonların

Dict. Anahtarlar tamsayılar veya sütun etiketleri olabilir, değerler bir girdi argümanını, Excel hücresi içeriğini alan ve dönüştürülen içeriği döndüren işlevlerdir.

örnek kod:

pandas.read_excel(my_file, converters = {my_str_column: str}) 
+0

Sayfada bulunan sütunların sayısını bilmiyorsak, bunu okurken her sütuna uygulamak için herhangi bir yol var mı? – Tango

+6

Çözüm var: 'dönüştürücüler = {col: sütun_listesinde col için str} df = pd.read_excel ('some_excelfile.xls', dönüştürücüler = dönüştürücüler)' – Tango

6

v0.20.0 başlayarak read_excel() fonksiyonunda dtype kelime argüman read_csv() durum için var gibi sütunlara uygulanabilir gereken veri türlerini belirtmek için kullanılabilir . Aynı sütun adına birlikte converters ve dtype kullanıldıkları zaman, bu öğelerin gölgelenmesine ve önceliğin kazanılmaya yol açması sağlanabilir.


1) Inorder o dtypes yorumlamak ziyade daha önce dosyada başlangıçta olduğu gibi bu sütunlar var biz biz değiliz ki str veya object bu arg ayarlayabilirsiniz, tüm içeriğini geçemedi için Verilerimizi karıştır.

pd.read_excel('file_name.xlsx', dtype=str)   # (or) dtype=object 

2) keys sütun adları oluşturan ve values burada Hatta, özellikle da set edilecek olan veri tip dict eşleme destekler (böyle bir durumda aksi takdirde kaybedilecek olan sayı sıfır gelen olacaktır) Tüm sütunların bir alt kümesi için dtype'u değiştirmek istediğinizde.durumda

# Assuming data types for `a` and `b` columns to be altered 
pd.read_excel('file_name.xlsx', dtype={'a': np.float64, 'b': np.int32}) 
+0

'read_excel' yöntemi' dtype' parametresini kabul etmiyor. –

1

sonra bu yöntem kullanışlı olabilir dataframe sütun sayısı ve adını farkında değilseniz:

column_list sütun adlarının
column_list = [] 
df_column = pd.read_excel(file_name, 'Sheet1').columns 
for i in df_column: 
    column_list.append(i) 
converter = {col: str for col in column_list} 
df_actual = pd.read_excel(file_name, converters=converter) 

.

İlgili konular