Python 为dataframe中的所有列提取显式类型
我有一个数据框,看起来像:Python 为dataframe中的所有列提取显式类型,python,python-3.x,pandas,dictionary,Python,Python 3.x,Pandas,Dictionary,我有一个数据框,看起来像: 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 1
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
其中日期
包含时间戳
,制造商
包含字符串
数据类型。我想逐列浏览dataframe并创建一个字典,其键是数据类型,其值是具有给定数据类型的列
这就是我现在正在做的:
g = dframe.columns.to_series().groupby(dframe.dtypes).groups
data_types = {k.name: v for k, v in g.items()}
而数据类型
如下所示:
{'float64': Index(['conductivity', 'price_per_unit', 'runtime'], dtype='object'),
'int64': Index(['number_bought'], dtype='object'),
'object': Index(['acquisition_date', 'manufacturer'], dtype='object')}
其中,采集日期
和制造商
不被视为时间戳
和字符串
,而是被视为对象
。有没有一种方法可以将时间戳
、字符串
和其他可能的数据类型包含在此目录中
编辑:只是为了确保我清楚地知道我在问什么。我想修改上述代码,以提供:
{'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()])
输出:
有两点值得注意:
object
dtype,则需要将包含日期的序列显式转换为datetime
string
dtype这样的东西。熊猫使用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')}
注意:您还可以使用:
我不明白你的意思。我只想让上面的代码能够将“object”类拆分为两个不同的类,即“string”和“timestamp”。@qbix是这样的吗?如果需要,可以更改datetime64键
{'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')}
data_types = {i: df.select_dtypes(include=[i]).columns for i in df.dtypes}