解决Pandas DataFrame新增列在info()中不显示的问题


解决Pandas DataFrame新增列在info()中不显示的问题

本教程旨在解决pandas dataframe中新增列(如'total'列或索引转换为列后)在`df.info()`输出中不显示的问题。核心原因通常是代码执行顺序不当,即在列创建前调用了`info()`,或未将索引显式转换为列。文章将详细阐述这些问题,并提供基于`reset_index()`和正确执行顺序的解决方案,确保所有期望的列都能在`df.info()`中正确呈现,从而便于后续数据分析与可视化。

Pandas DataFrame新增列在info()中不显示的深度解析与解决方案

在使用Pandas进行数据分析时,我们经常需要向DataFrame中添加新的列,例如计算总和列。然而,有时即使新列在DataFrame的显示输出中清晰可见,但在调用df.info()时,这些新列却未能出现在输出的列列表中。同样,DataFrame的索引列(如示例中的'A', 'B', 'C', 'D')在默认情况下也不会被df.info()识别为数据列。本文将深入探讨这些现象背后的原因,并提供切实可行的解决方案。

问题描述

假设我们有一个DataFrame df,包含 'H1', 'H2', 'H3' 三列。我们通过以下代码添加了一个 'Total' 列:

import pandas as pd
import numpy as np

# 示例数据
data = {
    'H1': [1.643910e+10, 3.876800e+09, 2.126470e+10, 3.911600e+09],
    'H2': [5.403600e+09, 1.056970e+10, 1.077500e+09, 3.309300e+09],
    'H3': [1.090100e+09, 6.152400e+09, 2.858000e+08, 8.170000e+07]
}
index_labels = ['A', 'B', 'C', 'D']
df = pd.DataFrame(data, index=index_labels)

# 添加 'Total' 列
df['Total'] = df[list(df.columns)].sum(axis=1)

print("DataFrame显示:")
print(df)

输出的DataFrame将正确显示 'Total' 列:

DataFrame显示:
             H1            H2          H3         Total
A  1.643910e+10  5.403600e+09  1.090100e+09  2.293280e+10
B  3.876800e+09  1.056970e+10  6.152400e+09  2.059890e+10
C  2.126470e+10  1.077500e+09  2.858000e+08  2.262800e+10
D  3.911600e+09  3.309300e+09  8.170000e+07  7.302600e+09

然而,当我们执行 df.info() 时,却可能得到以下结果,其中 'Total' 列和索引列并未显示:

print("\ndf.info()输出:")
df.info()
df.info()输出:
<class 'pandas.core.frame.DataFrame'>
Index: 4 entries, A to D
Data columns (total 3 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   H1      4 non-null      float64
 1   H2      4 non-null      float64
 2   H3      4 non-null      float64
dtypes: float64(3)
memory usage: 256.0+ bytes

核心原因与解决方案

这种现象主要由以下两个原因造成:

1. 代码执行顺序问题

df.info() 方法会打印出DataFrame在调用那一刻的结构信息。如果我们在创建 'Total' 列的代码执行之前就调用了 df.info(),那么它自然不会包含尚未创建的列。即使之后再创建了列,df.info() 的输出也不会自动更新。

解决方案:

确保在所有列创建和修改操作完成后再调用 df.info()。在交互式开发环境(如Jupyter Notebook或IPython)中,如果遇到此问题,最直接的解决办法是:

  • 重启内核并重新运行所有代码单元。 这可以确保所有代码按照预期顺序执行,且DataFrame的状态是最新的。

正确执行顺序示例:

import pandas as pd
import numpy as np

# 示例数据
data = {
    'H1': [1.643910e+10, 3.876800e+09, 2.126470e+10, 3.911600e+09],
    'H2': [5.403600e+09, 1.056970e+10, 1.077500e+09, 3.309300e+09],
    'H3': [1.090100e+09, 6.152400e+09, 2.858000e+08, 8.170000e+07]
}
index_labels = ['A', 'B', 'C', 'D']
df = pd.DataFrame(data, index=index_labels)

# 确保在调用 info() 之前创建 'Total' 列
df['Total'] = df[list(df.columns)].sum(axis=1)

# 现在调用 info(),'Total' 列将显示
print("\n正确执行顺序后的 df.info() 输出:")
df.info()

此时 df.info() 的输出将包含 'Total' 列:

Notion Sites Notion Sites

Notion 推出的AI网站构建工具,允许用户将 Notion 页面直接发布为完整网站。

Notion Sites 246 查看详情 Notion Sites
正确执行顺序后的 df.info() 输出:
<class 'pandas.core.frame.DataFrame'>
Index: 4 entries, A to D
Data columns (total 4 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   H1      4 non-null      float64
 1   H2      4 non-null      float64
 2   H3      4 non-null      float64
 3   Total   4 non-null      float64
dtypes: float64(4)
memory usage: 288.0+ bytes

2. 索引列的处理

DataFrame的索引(如示例中的 'A', 'B', 'C', 'D')在Pandas中是一个特殊的结构,它不是普通的数据列。因此,df.info() 默认不会将其列为数据列。如果需要将索引作为一列进行分析或可视化,需要将其显式转换为数据列。

解决方案:

使用 df.reset_index() 方法可以将DataFrame的索引重置为默认的整数索引,并将原有的索引转换为一个名为 'index'(或自定义名称)的普通数据列。

# 将索引转换为数据列
df_reset = df.reset_index()

print("\nreset_index() 后的 DataFrame 显示:")
print(df_reset)

print("\nreset_index() 后的 df.info() 输出:")
df_reset.info()

输出结果将显示 'index' 列:

reset_index() 后的 DataFrame 显示:
  index            H1            H2          H3         Total
0     A  1.643910e+10  5.403600e+09  1.090100e+09  2.293280e+10
1     B  3.876800e+09  1.056970e+10  6.152400e+09  2.059890e+10
2     C  2.126470e+10  1.077500e+09  2.858000e+08  2.262800e+10
3     D  3.911600e+09  3.309300e+09  8.170000e+07  7.302600e+09

reset_index() 后的 df.info() 输出:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Data columns (total 5 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   index   4 non-null      object 
 1   H1      4 non-null      float64
 2   H2      4 non-null      float64
 3   H3      4 non-null      float64
 4   Total   4 non-null      float64
dtypes: float64(4), object(1)
memory usage: 288.0+ bytes

注意事项:

  • reset_index() 会返回一个新的DataFrame,如果希望直接修改原DataFrame,可以使用 df.reset_index(inplace=True)(虽然不推荐,因为通常创建新DataFrame是更好的实践)。
  • 在执行 reset_index() 之后,如果再尝试使用 df[list(df.columns)].sum(axis=1) 来计算 'Total' 列,可能会因为 'index' 列(现在是对象类型)的存在而导致错误。正确的做法是先处理索引,再计算 'Total' 列,或者在计算 'Total' 列时排除非数值列。

3. inplace=True 参数的误解

在原始问题中提到了 inplace=True。需要明确的是,当我们通过直接赋值的方式 df['新列名'] = ... 来创建或修改列时,Pandas会直接在原DataFrame上进行操作,因此不需要也不应使用 inplace=True。这个参数主要用于那些会返回新DataFrame的方法(例如 drop(), fillna(), set_index() 等),以指示它们直接修改原DataFrame而不是返回一个副本。

总结

要确保Pandas DataFrame中的所有期望列(包括新增列和作为数据列的索引)都能在 df.info() 中正确显示,关键在于理解DataFrame的状态和操作的执行顺序:

  1. 执行顺序至关重要:始终在所有数据操作(包括新列创建)完成后再调用 df.info()。在交互式环境中,如果结果不符合预期,请尝试重启内核并重新运行所有代码。
  2. 索引的特殊性:DataFrame的索引默认不被视为数据列。如果需要将其作为一列进行分析,请使用 df.reset_index() 方法将其转换为普通数据列。
  3. inplace=True 的适用场景:直接赋值创建新列时无需使用 inplace=True。

通过遵循这些原则,您可以更准确地理解和调试DataFrame的结构,为后续的数据分析和可视化工作奠定坚实的基础。如果需要快速检查数值列的统计信息,df.describe() 也是一个有用的工具,它会自动包含所有数值类型的列。

以上就是解决Pandas DataFrame新增列在info()中不显示的问题的详细内容,更多请关注其它相关文章!


# 进行分析  # 海信营销市场推广  # 潍坊网站建设实战  # 万州门户网站建设  # 南市区网站推广  # 怎样自己优化网站  # 游戏网站建设与管理理解  # seo 达闻营销  # 前端优化seo排名前十  # 电动车市场营销推广方案  # 文创推广营销策略  # 多线程  # python  # 重启  # 当我们  # 数据结构  # 能在  # 如何实现  # 中不  # 将其  # 转换为  # 开发环境  # 工具 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894 】


相关推荐: 《随手记》启用语音备注方法  《via浏览器》强制缩放网页设置方法  小米手机截图后如何查看历史_小米手机截图历史记录查看方法  Win11便笺在哪打开 Win11桌面便笺(Sticky Notes)使用方法【详解】  J*aScript文本高亮功能优化:解决多词匹配错误与精确分割策略  win11自带录屏文件保存在哪里 Win11 Game Bar录制视频默认路径【分享】  嘴唇干裂起皮怎么办 唇部护理与预防干裂的方法【详解】  教资成绩怎么查询  Retrofit根路径POST请求:@POST("/") 的应用与解析  《sketchbook》选中部分图案移动方法  《大学搜题酱》官网地址登录  search中maxlength属性用法解析  微信客户端怎么查看二维码_微信客户端个人二维码查看方法  顺丰快递收费标准查询_如何查看顺丰最新收费价格  多闪电脑版下载_多闪PC端模拟器使用  悟空浏览器网页版链接 悟空浏览器网页版最新有效地址  windows server2019显卡驱动怎么安装_winserver2019显卡驱动安装与远程桌面优化  《律学法考》查看学习数据方法  海棠阅读网页版_进入海棠网页版在线阅读中心  B站怎么开|直播| B站|直播|申请需要什么条件【新手必看】  《360浏览器》自动保存账号密码设置方法  谷歌邮箱怎么换绑定邮箱Gmail安全备份邮箱修改方法  顺丰快递在线查询系统 顺丰快递官方查单入口  外媒评《燕云十六声》DIY载具新玩法:很像《塞尔达传说王国之泪》!  聚水潭ERP后台管理系统登录 聚水潭ERP官方登录通道  安居客移动经纪人怎么设置自动回复?-安居客移动经纪人设置自动回复的方法  金牛福袋获取攻略  解决Windows上Composer PATH变量冲突导致的命令无法识别问题  视频号视频怎么免费保存到相册?保存到相册需要注意什么?  FullCalendar自定义按钮样式定制指南  附近酒吧怎么找?  J*aScript二进制处理_ArrayBuffer与Blob  飞飞漫画漫画阅读官网_飞飞漫画漫画阅读官网进入阅读  Coolpad5890 ROM刷机包  《合金装备4》有望推出重制版!制作人发话了  Python测试中模块导入路径解析的最佳实践  byrutor直接访问入口 byrutor官方游戏库  火柴人战争网页版在线玩  视频转蓝光m2ts格式  《新三国志曹操传》游历事件袁尚突围攻略  空腹吃苹果好吗 苹果空腹摄入指南  J*aScript对象中深度嵌套URL键的查找与更新策略  iSpring三分屏制作教程  diskgenius分区工具如何设置Bios启动项  解决jQuery多计算器输入字段冲突的教程  Animex动漫社社登录官网 Animex动漫社资源社入口直达  Microsoft Edge网页字体太淡看不清怎么办_Microsoft Edge字体渲染优化技巧  如何在CSS中使用过渡制作按钮边框渐变_border-color transition实现  QQ邮箱注册地址 免费获取QQ邮箱账号  Composer如何使用composer-plugin-api开发自定义插件 

 2025-12-12

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.