根据数据types获取pandas数据框列表

如果我有以下列的数据框:

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] 

我想能够说:这里是一个数据框,给我列的types对象或types的DateTime的列表?

我有一个将数字(Float64)转换为两位小数的函数,我想使用这个特定types的数据框列的列表,并通过这个函数运行它,将它们全部转换为2dp。

也许:

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

如果你想要一个特定types的列的列表,你可以使用groupby

 >>> df = pd.DataFrame([[1, 2.3456, 'c', 'd', 78]], columns=list("ABCDE")) >>> df ABCDE 0 1 2.3456 cd 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']} 

从pandas v0.14.1开始,可以利用select_dtypes()来按dtypeselect列

 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'] 

您可以在dtypes属性上使用布尔值掩码:

 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 

你可以只看那些所需的dtype列:

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

现在,您可以使用round(或其他)并将其分配:

 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 

使用dtype会给你想要的列的数据types:

 dataframe['column1'].dtype 

如果你想一次知道所有列的数据types ,你可以使用复数dtype作为dtype :

 dataframe.dtypes 

如果你想要一个只有对象列的列表,你可以这样做:

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

然后如果你想获得另一个只有数字的列表:

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