veri türüne göre panda veri çerçevesi sütunlarının listesini alma


184

Aşağıdaki sütunlara sahip bir veri çerçevem ​​varsa:

1. NAME                                     object
2. On_Time                                      object
3. On_Budget                                    object
4. %actual_hr                                  float64
5. Baseline Start Date                  datetime64[ns]
6. Forecast Start Date                  datetime64[ns] 

Söyleyebilmek istiyorum: İşte bir dataframe, bana nesne türü veya DateTime türü sütunların bir listesini vermek?

Sayıları (Float64) iki ondalık basamağa dönüştüren bir işlevi var ve belirli bir tür veri çerçevesi sütun listesini kullanmak ve hepsini 2dp dönüştürmek için bu işlevi çalıştırmak istiyorum.

Olabilir:

For c in col_list: if c.dtype = "Something"
list[]
List.append(c)?

4
Bu soruya geldiğimde, tam olarak en üstteki listeyi oluşturmanın bir yolunu arıyordum. df.dtypesbunu yapar.
Martin Thoma

Ziyaretçiler ayrıca her bir sütundaki tüm nesne türlerinin nasıl bulunacağıyla ilgili bu farklı ancak ilgili soruya da ilgi duyabilir : Panda nesne sütunlarındaki alt türleri nasıl tespit edebilirim? .
jpp

Yanıtlar:


315

Belirli bir türdeki sütunların bir listesini istiyorsanız, aşağıdakileri kullanabilirsiniz groupby:

>>> df = pd.DataFrame([[1, 2.3456, 'c', 'd', 78]], columns=list("ABCDE"))
>>> df
   A       B  C  D   E
0  1  2.3456  c  d  78

[1 rows x 5 columns]
>>> df.dtypes
A      int64
B    float64
C     object
D     object
E      int64
dtype: object
>>> g = df.columns.to_series().groupby(df.dtypes).groups
>>> g
{dtype('int64'): ['A', 'E'], dtype('float64'): ['B'], dtype('O'): ['C', 'D']}
>>> {k.name: v for k, v in g.items()}
{'object': ['C', 'D'], 'int64': ['A', 'E'], 'float64': ['B']}

5
Bu, sütunların beklendiği türde olmasını sağlayan Veri Kalitesi kontrolü olarak kullanışlıdır.
NYCeyes

2
tüm veri çerçevesi sütunlarınız objectgerçek içeriğinden bağımsız olarak tür döndürüyorsa bu çalışmaz
user5359531

2
@ user5359531, bunun çalışmadığı anlamına gelmez, bu aslında DataFrame sütunlarınızın olması gerektiğini düşündüğünüz türe yayınlanmadığı anlamına gelir, bu da çeşitli nedenlerden kaynaklanabilir.
Marc

6
Sütunları yalnızca veri türüne göre seçiyorsanız, bu yanıt geçersizdir. select_dtypesBunun yerine kullanın
Ted Petrou

Daha sonra bu gruplandırılmış veri çerçevesini nasıl endekslersiniz?
Allen Wang

111

Panda v0.14.1'den itibaren select_dtypes()sütunları dtype ile seçmek için kullanabilirsiniz

In [2]: df = pd.DataFrame({'NAME': list('abcdef'),
    'On_Time': [True, False] * 3,
    'On_Budget': [False, True] * 3})

In [3]: df.select_dtypes(include=['bool'])
Out[3]:
  On_Budget On_Time
0     False    True
1      True   False
2     False    True
3      True   False
4     False    True
5      True   False

In [4]: mylist = list(df.select_dtypes(include=['bool']).columns)

In [5]: mylist
Out[5]: ['On_Budget', 'On_Time']

35

Kullanmak dtypesize istediğiniz sütunun veri türünü verecektir:

dataframe['column1'].dtype

tüm sütunun veri türlerini aynı anda bilmek istiyorsanız, çoğul ifadesini dtypesdtype olarak kullanabilirsiniz :

dataframe.dtypes

1
Bu kabul edilen cevap olmalıdır, veri türlerini OP'nin istediği formatta yazdırır.
Abhishek Divekar

1
Soru, örneğin df.select_dtypes(include=['Object','DateTime']).columnsaşağıda tartışıldığı gibi yalnızca belirli veri türlerini listelemekti
DfAC

29

Botanik maskesini dtypes özelliğinde kullanabilirsiniz:

In [11]: df = pd.DataFrame([[1, 2.3456, 'c']])

In [12]: df.dtypes
Out[12]: 
0      int64
1    float64
2     object
dtype: object

In [13]: msk = df.dtypes == np.float64  # or object, etc.

In [14]: msk
Out[14]: 
0    False
1     True
2    False
dtype: bool

İstediğiniz dtype ile yalnızca bu sütunlara bakabilirsiniz:

In [15]: df.loc[:, msk]
Out[15]: 
        1
0  2.3456

Şimdi yuvarlak (veya her neyse) kullanabilir ve geri atayabilirsiniz:

In [16]: np.round(df.loc[:, msk], 2)
Out[16]: 
      1
0  2.35

In [17]: df.loc[:, msk] = np.round(df.loc[:, msk], 2)

In [18]: df
Out[18]: 
   0     1  2
0  1  2.35  c

Bir veri çerçevesi adını alır ve daha sonra sözlük anahtarı veri türü ve değeri olan veri çerçevesinden sütun listesi olan bir liste sözlüğü döndüren bir işlev yazmak isterdim veri tipi.
yoshiserry

def col_types (x, pd):
itthrill

14
list(df.select_dtypes(['object']).columns)

Bu hile yapmalı


7

Kullanım varsayılan olarak datafarme bir panda olandf.info(verbose=True)dfverbose=False


tablo büyükse bellek sorunları olabilir
Koo

4

Belirli bir türün sütunlarının bir listesini almanın en doğrudan yolu, örneğin 'nesne':

df.select_dtypes(include='object').columns

Örneğin:

>>df = pd.DataFrame([[1, 2.3456, 'c', 'd', 78]], columns=list("ABCDE"))
>>df.dtypes

A      int64
B    float64
C     object
D     object
E      int64
dtype: object

Tüm 'nesne' dtype sütunlarını almak için:

>>df.select_dtypes(include='object').columns

Index(['C', 'D'], dtype='object')

Sadece liste için:

>>list(df.select_dtypes(include='object').columns)

['C', 'D']   

3

Yalnızca yapabileceğiniz nesne sütunlarının bir listesini istiyorsanız:

non_numerics = [x for x in df.columns \
                if not (df[x].dtype == np.float64 \
                        or df[x].dtype == np.int64)]

ve sonra sadece sayısalların başka bir listesini almak istiyorsanız:

numerics = [x for x in df.columns if x not in non_numerics]

0

Bu üç astarı buldum .

Temel olarak, işte yaptığı şey:

  1. Sütun adlarını ve ilgili veri türlerini getirin.
  2. İsteğe bağlı olarak bir csv çıktı.

inp = pd.read_csv('filename.csv') # read input. Add read_csv arguments as needed
columns = pd.DataFrame({'column_names': inp.columns, 'datatypes': inp.dtypes})
columns.to_csv(inp+'columns_list.csv', encoding='utf-8') # encoding is optional

Bu , anında şemalar oluşturmaya çalışırken hayatımı çok daha kolay hale getirdi . Bu yardımcı olur umarım


0

yoshiserry için;

def col_types(x,pd):
    dtypes=x.dtypes
    dtypes_col=dtypes.index
    dtypes_type=dtypes.value
    column_types=dict(zip(dtypes_col,dtypes_type))
    return column_types

0

İnfer_objects () kullanıyorum

Docstring: Nesne sütunları için daha iyi türler çıkarmayı deneyin.

Nesne olmayan ve dönüştürülemeyen sütunları değiştirmeden, nesne dtyped sütunlarının yumuşak dönüşümünü dener. Çıkarım kuralları normal Seri / DataFrame oluşturma sırasındakiyle aynıdır.

df.infer_objects().dtypes

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.