如何在Python Pandas中将函数结果存入字典并生成指定DataFrame
问题:如何让DataFrame的列显示函数执行结果而非函数对象?
我编写了两个读取CSV文件并执行校验的函数:
- 统计该CSV文件的行数
- 统计
ID列存在空值的行数
我希望生成如下结构的DataFrame:
| Checks | Summary | Findings |
|---|---|---|
| Check #1 | Number of records on file | Number of records on file: 10 |
| Check #2 | Number of records missing an ID | Number of records missing an ID: 2 |
现有函数代码:
函数1(统计行数)
def function1(): with open('data.csv') as file: record_number = len(list(file)) print("Number of records on file:",record_number) function1()
输出:Number of records on file: 10
函数2(统计ID列空值行数)
import pandas as pd def function2(): df = pd.read_csv('data.csv', low_memory=False) missing_id = df["IDs"].isna().sum() print("Number of records missing an ID:", missing_id) function2()
输出:Number of records missing an ID: 2
我尝试通过字典生成DataFrame:
table = { 'Checks' : ['Check #1', 'Check #2'], 'Summary' : ['Number of records on file', 'Number of records missing an ID'], 'Findings' : [function1, function2] } df = pd.DataFrame(table) df
但生成的DataFrame中Findings列显示的是函数对象,请问如何让该列显示函数的实际输出结果?
解决方案
问题出在两个核心点:一是你的函数仅通过print输出结果,没有返回值;二是你在字典中传入的是函数对象而非函数执行后的结果。按以下步骤修改即可:
1. 修改函数,让其返回结果字符串
调整两个函数,在print的同时返回格式化后的结果字符串,这样调用函数时能直接获取到需要的内容:
# 修改后的function1 def function1(): with open('data.csv') as file: record_number = len(list(file)) result = f"Number of records on file: {record_number}" print(result) return result # 修改后的function2 import pandas as pd def function2(): df = pd.read_csv('data.csv', low_memory=False) missing_id = df["IDs"].isna().sum() result = f"Number of records missing an ID: {missing_id}" print(result) return result
2. 调用函数获取结果后生成DataFrame
在字典的Findings列表中,传入函数调用的结果(即加括号function1()、function2()),而非函数本身:
table = { 'Checks' : ['Check #1', 'Check #2'], 'Summary' : ['Number of records on file', 'Number of records missing an ID'], 'Findings' : [function1(), function2()] } df = pd.DataFrame(table) print(df)
执行后,Findings列就会显示函数实际输出的结果字符串,完全符合你想要的DataFrame结构。
内容的提问来源于stack exchange,提问作者bananas
相关产品推荐
相关产品推荐

