根据数据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]