получить список столбцов фрейма данных 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]
Я хотел бы быть в состоянии сказать: вот фрейм данных, дайте мне список столбцов, которые имеют тип Object или типа DateTime?
у меня есть функция, которая преобразует числа (Float64) в два десятичных знака, и я хотел бы использовать этот список столбцов dataframe определенного типа и запустить его через эту функцию, чтобы преобразовать их все в 2dp.
может быть:
For c in col_list: if c.dtype = "Something"
list[]
List.append(c)?
10 ответов:
Если вы хотите получить список столбцов определенного типа, вы можете использовать
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']}
как панды v0. 14. 1, Вы можете использовать
select_dtypes()для выбора столбцов по dtypeIn [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Теперь вы можете использовать раунд (или что-то еще) и назначить его обратно:
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даст вам нужный тип данных столбца:dataframe['column1'].dtype
если вы хотите знать типы данных всех столбцов сразу, вы можете использовать множественное число
dtypeкак dtypes: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]
самый прямой способ получить список столбцов определенного dtype например 'object':
df.select_dtypes(include='object').columnsнапример:
>>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чтобы получить все столбцы dtype' object':
>>df.select_dtypes(include='object').columns Index(['C', 'D'], dtype='object')только для списка:
>>list(df.select_dtypes(include='object').columns) ['C', 'D']
Я придумал эти три лайнера.
по сути, вот что он делает:
- получить имена столбцов и их типы данных.
- я дополнительно выводить его в csv.
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Это сделало мою жизнь намного легче в попытках создает схемы на лету. Надеюсь, это поможет
для yoshiserry;
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
Comments