
DataFrame.info() 是一个用于打印数据框结构信息的诊断方法,它不返回任何值(即返回 None),因此直接赋值会导致变量为 None;若需捕获信息内容,应改用 df.info(verbose=True, memory_usage=True) 的输出重定向或 df.dtypes, df.shape 等显式属性。
```dataframe.info()``` 是一个用于打印数据框结构信息的诊断方法,它不返回任何值(即返回 ```none```),因此直接赋值会导致变量为 ```none```;若需捕获信息内容,应改用 ```df.info(verbose=true, memory_usage=true)``` 的输出重定向或 ```df.dtypes```, ```df.shape``` 等显式属性。
DataFrame.info() 是 Pandas 中专为交互式探索和调试设计的便捷方法,其核心职责是向标准输出(stdout)打印数据框的元信息摘要,而非返回可编程处理的对象。这正是问题中 dfi = df.info() 导致 dfi 为 None 的根本原因——该方法的返回值明确为 None(Python 中无 return 语句的函数默认返回 None)。
以下是一个清晰的验证示例:
import pandas as pd import numpy.random as npr npr.seed(0) df = pd.DataFrame(npr.randint(1, 10, size=(3, 4))) # ✅ 正确用法:仅调用,用于查看信息(不赋值) df.info() # 输出: # <class 'pandas.core.frame.DataFrame'> # RangeIndex: 3 entries, 0 to 2 # Data columns (total 4 columns): # # Column Non-Null Count Dtype # --- ------ -------------- ----- # 0 0 3 non-null int64 # 1 1 3 non-null int64 # 2 2 3 non-null int64 # 3 3 3 non-null int64 # dtypes: int64(4) # memory usage: 224.0 bytes # ❌ 错误用法:赋值给变量 → 得到 None dfi = df.info() print(dfi) # 输出:None
⚠️ 注意事项:
- 不要将 info() 赋值给变量,它不是“获取信息”的 getter 方法,而是“展示信息”的副作用函数(side-effect function)。
- 若需程序化获取结构信息,推荐组合使用以下属性:
- df.shape → (行数, 列数)
- df.dtypes → 各列数据类型 Series
- df.memory_usage(deep=True).sum() → 总内存占用(字节)
- df.isnull().sum() → 每列缺失值数量
如需捕获 info() 的完整文本输出(例如写入日志),可通过 io.StringIO 重定向 sys.stdout:
import io
import sys
buffer = io.StringIO()
df.info(buf=buffer) # 将输出写入 buffer 而非屏幕
info_text = buffer.getvalue()
buffer.close()
print("Captured info:\n", info_text[:200] + "...") # 示例:截取前200字符✅ 总结:这不是 Spyder 或 Pandas 的 Bug,而是符合设计意图的预期行为。理解 info() 的「只输出、不返回」特性,能避免常见误用,并引导开发者选用更合适、更可控的 API 来获取结构元数据。


















