Python 3.x 如何在数据帧中适当地测试数据类型?

Python 3.x 如何在数据帧中适当地测试数据类型?,python-3.x,pandas,numpy,Python 3.x,Pandas,Numpy,目标:创建一个函数,使给定的数据类型与预先定义的数据类型场景相匹配 描述:我希望能够根据给定数据集的属性将其分类为预定义的场景类型 下面是两个示例数据集(df_a和df_b)df_a只有等于'object'的数据类型,而df_b既有'object'又有'int64': # scenario_a data_a = [['tom', 'blue'], ['nick', 'green'], ['julia', 'red']] df_a = pd.DataFrame(data, columns =

目标:创建一个函数,使给定的数据类型与预先定义的数据类型场景相匹配

描述:我希望能够根据给定数据集的属性将其分类为预定义的场景类型

下面是两个示例数据集(
df_a
df_b
df_a
只有等于
'object'
的数据类型,而
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
时,我希望函数能够正确确定应该是什么场景


任何帮助都将不胜感激。

这里有一种方法。创建一个dict
scenarios
,其中的键是一个预定义数据类型的已排序的
元组
,该值是您希望函数返回的值

使用您的示例,例如:

# 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

如果您想坚持使用If contains返回样式,您可以尝试
map(str,data.dtypes.tolist())
,它将为您提供一个要查询的字符串映射,例如map中的
“object”(str,data.dtypes.tolist())