如何在数据帧内适当测试Pandas dtypes?

时间:2019-03-09 14:48:00

标签: python-3.x pandas numpy

目标:创建一个可以将给定dtypes与预定数据类型方案匹配的函数。

描述:我希望能够基于给定数据集的归类将其划分为预定义场景类型。

下面是两个示例数据集(df_adf_b)。 df_a仅具有等于'object'的dtype,而df_b同时具有'object''int64'

# scenario_a
data_a = [['tom', 'blue'], ['nick', 'green'], ['julia', 'red']]  
df_a = pd.DataFrame(data, columns = ['Name','Color']) 
df_a['Color'] = df_a['Color'].astype('object')

# scenario_b
data_b = [['tom', 10], ['nick', 15], ['julia', 14]]  
df_b = pd.DataFrame(data, columns = ['Name', 'Age'])

我希望能够根据功能自动确定它是哪种情况:

import pandas as pd
import numpy as np

def scenario(data):
    if data.dtypes.str.contains('object'):
        return scenario_a
    if data.dtypes.str.contatin('object', 'int64'):
        return scenario_b

以上是我到目前为止的内容,但是没有得到我想要的结果。

使用函数scenario(df_a)时,我希望结果为scenario_a;通过df_b时,我希望该函数能够正确确定哪种情况应该是。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

这是一种方法。创建一个字典scenarios,其键为预定义dtypes排序的tuple,其值是函数希望返回的值。

使用您的示例,例如:

# scenario a
data_a = [['tom', 'blue'], ['nick', 'green'], ['julia', 'red']]  
df_a = pd.DataFrame(data_a, columns = ['Name','Color']) 
df_a['Color'] = df_a['Color'].astype('object')

# scenario_b
data_b = [['tom', 10], ['nick', 15], ['julia', 14]]  
df_b = pd.DataFrame(data_b, columns = ['Name', 'Age'])

scenario_a = tuple(sorted(df_a.dtypes.unique()))
scenario_b = tuple(sorted(df_b.dtypes.unique()))

scenarios = {
    scenario_a: 'scenario_a',
    scenario_b: 'scenario_b'
}

print(scenarios)

# scenarios:
# {(dtype('O'),): 'scenario_a', (dtype('int64'), dtype('O')): 'scenario_b'}

def scenario(data):
    dtypes = tuple(sorted(data.dtypes.unique()))
    return scenarios.get(dtypes, None)

scenario(df_a)
# 'scenario_a'

scenario(df_b)
# scenario_b