You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将pandas.api函数列表应用于多个DataFrame并获取结果?

解决pandas类型判断函数批量应用报错问题

问题背景

需要将一组pandas.api.types下的类型判断函数批量应用到多个DataFrame,获取各列的类型检测结果,但运行代码时触发TypeError: 'str' object is not callable错误。

错误原因

原代码中将函数对象转换为字符串存储在api_df['function']列中,后续apply时尝试直接调用字符串对象(如infer_dtype(df1)),字符串并非可调用对象,因此报错。

修正方案

直接保留函数对象进行操作,避免将函数转为字符串后再通过eval调用,以下是两种可行的实现方式:

方式一:遍历函数与DataFrame列填充结果

import pandas as pd

# 构造并预处理示例DataFrame
df1 = pd.DataFrame({
    'Datetime': ['2002-12-31 01:00:00', '2002-12-31 02:00:00', 
                 '2002-12-31 03:00:00', '2002-12-31 04:00:00'],
    'value': [5077.0, 4939.0, 4885.0, 4857.0]
})
df1['Datetime'] = pd.to_datetime(df1['Datetime'])
df1 = df1.add_prefix('df1_')

df2 = pd.DataFrame({
    'Datetime': ['2013-12-31 01:00:00', '2013-12-31 02:00:00', 
                 '2013-12-31 03:00:00', '2013-12-31 04:00:00', 
                 '2013-12-31 05:00:00'],
    'value': [1861.0, 1835.0, 1841.0, 1872.0, 1934.0]
})
df2['Datetime'] = pd.to_datetime(df2['Datetime'])
df2 = df2.add_prefix('df2_')

# 定义要使用的类型判断函数列表
panda_apis = [
    pd.api.types.infer_dtype,
    pd.api.types.is_bool_dtype,
    pd.api.types.is_categorical_dtype,
    pd.api.types.is_complex_dtype,
    pd.api.types.is_datetime64_any_dtype,
    pd.api.types.is_datetime64_dtype
]

# 初始化结果DataFrame
api_df = pd.DataFrame({'function': [func.__name__ for func in panda_apis]})

# 遍历函数,批量填充各DataFrame列的检测结果
for func in panda_apis:
    # 处理df1的列
    for col in df1.columns:
        api_df.loc[api_df['function'] == func.__name__, col] = func(df1[col])
    # 处理df2的列
    for col in df2.columns:
        api_df.loc[api_df['function'] == func.__name__, col] = func(df2[col])

print(api_df)

方式二:生成结果字典再转DataFrame(更高效简洁)

import pandas as pd

# 构造并预处理示例DataFrame(同方式一)
df1 = pd.DataFrame({
    'Datetime': ['2002-12-31 01:00:00', '2002-12-31 02:00:00', 
                 '2002-12-31 03:00:00', '2002-12-31 04:00:00'],
    'value': [5077.0, 4939.0, 4885.0, 4857.0]
})
df1['Datetime'] = pd.to_datetime(df1['Datetime'])
df1 = df1.add_prefix('df1_')

df2 = pd.DataFrame({
    'Datetime': ['2013-12-31 01:00:00', '2013-12-31 02:00:00', 
                 '2013-12-31 03:00:00', '2013-12-31 04:00:00', 
                 '2013-12-31 05:00:00'],
    'value': [1861.0, 1835.0, 1841.0, 1872.0, 1934.0]
})
df2['Datetime'] = pd.to_datetime(df2['Datetime'])
df2 = df2.add_prefix('df2_')

# 定义要使用的类型判断函数列表
panda_apis = [
    pd.api.types.infer_dtype,
    pd.api.types.is_bool_dtype,
    pd.api.types.is_categorical_dtype,
    pd.api.types.is_complex_dtype,
    pd.api.types.is_datetime64_any_dtype,
    pd.api.types.is_datetime64_dtype
]

# 定义函数,生成单个DataFrame的类型检测结果字典
def get_col_type_results(func, df):
    return {col: func(df[col]) for col in df.columns}

# 收集所有函数的检测结果
results = []
for func in panda_apis:
    result_row = {'function': func.__name__}
    result_row.update(get_col_type_results(func, df1))
    result_row.update(get_col_type_results(func, df2))
    results.append(result_row)

# 转换为DataFrame
api_df = pd.DataFrame(results)

print(api_df)

输出结果

运行上述代码后,将得到符合预期格式的结果:

function df1_Datetime df1_value df2_Datetime df2_value
0              infer_dtype      datetime    float64      datetime    float64
1           is_bool_dtype         False     False         False     False
2    is_categorical_dtype         False     False         False     False
3        is_complex_dtype         False     False         False     False
4  is_datetime64_any_dtype          True     False          True     False
5      is_datetime64_dtype          True     False          True     False

内容的提问来源于stack exchange,提问作者Mainland

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 18:43:14