У меня есть фрейм данных, который выглядит так:
acquisition_date conductivity manufacturer number_bought price_per_unit runtime
0 05/25/2008 06:20 PM 115.372339 555-timer 1 9.909869 685.378635
1 07/05/2008 01:58 PM 96.981356 diode 6 11.673483 1020.772530
2 03/25/2008 08:52 AM 103.809491 resistor 7 9.879431 910.086424
3 10/31/2008 05:28 PM 95.805199 transistor 5 10.097940 912.137440
4 03/17/2008 06:58 PM 98.447452 thermistor 0 12.280878 1277.008237
где date содержит timestamp, а manufacturer содержит тип данных string. Я хочу просмотреть фрейм данных, столбец за столбцом, и создать словарь, ключи которого являются типом данных, а значения - столбцами с заданным типом данных.
Вот чем я сейчас занимаюсь:
g = dframe.columns.to_series().groupby(dframe.dtypes).groups
data_types = {k.name: v for k, v in g.items()}
а data_types выглядит так:
{'float64': Index(['conductivity', 'price_per_unit', 'runtime'], dtype='object'),
'int64': Index(['number_bought'], dtype='object'),
'object': Index(['acquisition_date', 'manufacturer'], dtype='object')}
где acquisition_date и manufacturer рассматриваются не как timestamp и string, а как objects. Есть ли способ включить в этот dict timestamp, string и другие возможные типы данных?
Обновлено: Просто чтобы убедиться, что я четко понял, о чем прошу. Я хочу изменить приведенный выше код, чтобы получить:
{'float64': Index(['conductivity', 'price_per_unit', 'runtime'], dtype='object'),
'int64': Index(['number_bought'], dtype='object'),
'timestamp': Index(['acquisition_date'], dtype='object'),
'string': Index(['manufacturer'], dtype='object')}






Вы можете использовать df.dtypes для получения типа данных столбцов, после чего вы можете создать словарь с использованием объектов в качестве ключей и столбцов в качестве значений
df1.acquisition_date = pd.to_datetime(df1.acquisition_date)
dict([(i.name,df1.dtypes[df1.dtypes==i].index) for i in df1.dtypes.unique()])
Из:
{'datetime64[ns]': Index(['acquisition_date'], dtype='object'),
'float64': Index(['conductivity', 'price_per_unit', 'runtime'], dtype='object'),
'int64': Index(['number_bought'], dtype='object'),
'object': Index(['manufacturer'], dtype='object')}
@Qubix это что-то вроде этого, вы можете изменить ключ datetime64, если хотите
Следует отметить два момента:
datetime, если он в настоящее время имеет dtype object.string dtype не существует. Pandas использует object dtype для хранения произвольных объектов Python.Таким образом, вы можете использовать pd.to_datetime. Предполагается, что object dtype будет содержать только строки. Для правильной проверки этого придется проверять каждое значение в отдельности, это дорого и не рекомендуется. Вот демонстрация:
df = pd.DataFrame({'A': pd.to_datetime(['2018-01-01', '2018-11-30']),
'B': [4352.123, 5364.1],
'C': [423, 2134],
'D': ['SomeString', 'AnotherString'],
'E': [653.213, 764.1234],
'F': [True, False]})
g = df.columns.to_series().groupby(df.dtypes).groups
data_types = {k.name: v for k, v in g.items()}
Результат:
{'bool': Index(['F'], dtype='object'),
'datetime64[ns]': Index(['A'], dtype='object'),
'float64': Index(['B', 'E'], dtype='object'),
'int64': Index(['C'], dtype='object'),
'object': Index(['D'], dtype='object')}
Обратите внимание, что вы также можете использовать pd.DataFrame.select_dtypes:
data_types = {i: df.select_dtypes(include=[i]).columns for i in df.dtypes}
Я не понимаю о чем ты. Все, что я хочу, это чтобы мой код, приведенный выше, мог разделить класс «объект» на два разных, «строку» и «временную метку» в этом словаре.