当前位置: 首页 > news >正文

Pandas DataFrame 列数操作完全指南

在数据分析工作中,准确获取和操作 DataFrame 的列数是常见需求。本文将深入探讨 pandas DataFrame 列数的各种操作方法。

基础导入和设置

import pandas as pd
import numpy as np
print("pandas版本:", pd.__version__)
print("numpy版本:", np.__version__)

基础方法

使用 shape 属性

import pandas as pd
import numpy as np# 创建全新的示例 DataFrame
df_shape = pd.DataFrame({'学生ID': [1, 2, 3, 4],'姓名': ['张三', '李四', '王五', '赵六'],'数学成绩': [85, 92, 78, 88],'英语成绩': [90, 85, 92, 79],'物理成绩': [88, 76, 85, 91]
})# 获取列数
num_columns = df_shape.shape[1]
print(f"DataFrame 的列数为: {num_columns}")
print(f"DataFrame 的形状 (行数, 列数): {df_shape.shape}")

使用 columns 属性

import pandas as pd# 创建全新的 DataFrame
df_columns = pd.DataFrame({'产品名称': ['手机', '笔记本', '平板', '耳机'],'价格': [2999, 5999, 3999, 899],'库存数量': [50, 30, 40, 100],'类别': ['电子', '电子', '电子', '配件']
})# 获取列数
num_columns = len(df_columns.columns)
print(f"DataFrame 的列数为: {num_columns}")
print(f"列名列表: {list(df_columns.columns)}")
print(f"列名详细信息: {df_columns.columns}")

使用 info() 方法

import pandas as pd# 创建全新的 DataFrame
df_info = pd.DataFrame({'城市': ['北京', '上海', '广州', '深圳'],'人口(万)': [2154, 2428, 1868, 1756],'GDP(亿元)': [36103, 38701, 25019, 27670],'面积(km²)': [16410, 6340, 7434, 1997]
})# 使用 info() 查看列数信息
print("DataFrame 信息:")
df_info.info()

高级应用

动态列数统计

import pandas as pd
import numpy as np# 创建包含多种数据类型的全新 DataFrame
df_dynamic = pd.DataFrame({'员工ID': [101, 102, 103, 104, 105],'姓名': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],'年龄': [28, 32, 45, 29, 38],'薪资': [25000, 32000, 48000, 27000, 42000],'部门': ['技术部', '市场部', '技术部', '人事部', '市场部'],'入职日期': pd.to_datetime(['2020-01-15', '2018-06-20', '2015-03-10', '2019-08-05', '2017-11-30']),'是否全职': [True, True, True, False, True]
})# 统计数值型列的个数
numeric_cols = df_dynamic.select_dtypes(include=[np.number])
print(f"数值型列的个数: {len(numeric_cols.columns)}")
print(f"数值型列名: {list(numeric_cols.columns)}")# 统计文本型列的个数
string_cols = df_dynamic.select_dtypes(include=[object])
print(f"文本型列的个数: {len(string_cols.columns)}")
print(f"文本型列名: {list(string_cols.columns)}")# 统计布尔型列的个数
bool_cols = df_dynamic.select_dtypes(include=[bool])
print(f"布尔型列的个数: {len(bool_cols.columns)}")
print(f"布尔型列名: {list(bool_cols.columns)}")

条件列数统计

import pandas as pd# 创建全新的销售数据 DataFrame
sales_df = pd.DataFrame({'产品编号': ['P001', 'P002', 'P003', 'P004', 'P005'],'产品名称': ['iPhone', 'MacBook', 'iPad', 'AirPods', 'Watch'],'一月销量': [150, 80, 120, 200, 180],'二月销量': [160, 85, 130, 210, 190],'三月销量': [170, 90, 140, 220, 200],'四月销量': [180, 95, 150, 230, 210],'类别': ['手机', '电脑', '平板', '耳机', '手表']
})# 统计包含 '销量' 的列数
sales_columns = [col for col in sales_df.columns if '销量' in col]
sales_count = len(sales_columns)
print(f"销售相关列的个数: {sales_count}")
print(f"销售相关列名: {sales_columns}")# 使用 filter 方法
filtered_sales = sales_df.filter(like='销量')
print(f"\n使用 filter 方法的结果:")
print(f"销售列数: {len(filtered_sales.columns)}")
print(f"销售列数据:\n{filtered_sales.head()}")

性能比较

import pandas as pd
import numpy as np
import time# 创建全新的大型 DataFrame
performance_df = pd.DataFrame(np.random.randn(500, 300))
performance_df.columns = [f'col_{i}' for i in range(performance_df.shape[1])]# 测试不同方法的性能
methods = []
times = []# 测试 shape 方法
start = time.time()
for _ in range(100):result = performance_df.shape[1]
shape_time = time.time() - start
methods.append('shape[1]')
times.append(shape_time)# 测试 len(columns) 方法
start = time.time()
for _ in range(100):result = len(performance_df.columns)
len_time = time.time() - start
methods.append('len(columns)')
times.append(len_time)# 显示性能结果
print("性能测试结果:")
for method, t in zip(methods, times):print(f"{method}: {t:.6f} 秒")print(f"\n性能差异: {abs(shape_time - len_time):.6f} 秒")

实际应用场景

数据质量检查

import pandas as pd# 创建包含缺失值的全新 DataFrame
quality_check_df = pd.DataFrame({'订单号': [1001, 1002, 1003, 1004, 1005],'客户姓名': ['张三', '李四', None, '王五', '赵六'],'订单金额': [299.0, None, 599.0, 399.0, 899.0],'支付方式': ['支付宝', '微信', '信用卡', None, '支付宝'],'配送状态': ['已发货', '已发货', None, '已收货', '已发货']
})print("原始数据:")
print(quality_check_df)# 数据质量分析
total_columns = quality_check_df.shape[1]
columns_with_missing = quality_check_df.isnull().any()
missing_columns_count = columns_with_missing.sum()print(f"\n数据质量报告:")
print(f"总列数: {total_columns}")
print(f"有缺失值的列数: {missing_columns_count}")
print(f"完整列数: {total_columns - missing_columns_count}")
print(f"有缺失值的列名: {list(quality_check_df.columns[columns_with_missing])}")

自动化数据处理函数

import pandas as pd
import numpy as npdef analyze_dataframe(df, df_name="DataFrame"):"""自动化分析 DataFrame 的基本特征"""print(f"\n=== {df_name} 分析报告 ===")total_columns = df.shape[1]numeric_columns = len(df.select_dtypes(include=[np.number]).columns)categorical_columns = len(df.select_dtypes(include=[object]).columns)datetime_columns = len(df.select_dtypes(include=['datetime']).columns)bool_columns = len(df.select_dtypes(include=[bool]).columns)print(f"总列数: {total_columns}")print(f"数值型列数: {numeric_columns}")print(f"分类型列数: {categorical_columns}")print(f"日期时间列数: {datetime_columns}")print(f"布尔型列数: {bool_columns}")print(f"其他类型列数: {total_columns - numeric_columns - categorical_columns - datetime_columns - bool_columns}")return {'total_columns': total_columns,'numeric_columns': numeric_columns,'categorical_columns': categorical_columns,'datetime_columns': datetime_columns,'bool_columns': bool_columns}# 测试函数
test_df = pd.DataFrame({'id': [1, 2, 3, 4],'name': ['Alice', 'Bob', 'Charlie', 'David'],'age': [25, 30, 35, 40],'salary': [50000.0, 60000.0, 70000.0, 80000.0],'is_manager': [False, True, False, True],'hire_date': pd.to_datetime(['2020-01-01', '2019-06-15', '2018-03-20', '2017-12-10'])
})analysis_result = analyze_dataframe(test_df, "员工信息表")

数学表达与理论

在数据处理中,列数的概念可以形式化表示为:

设 DataFrame DDDnnn 个样本(行)和 mmm 个特征(列),则列数可以表示为:

m=∣C∣m = |C|m=C

其中 CCC 是列名的集合,∣C∣|C|C 表示集合的基数。

对于包含 kkk 种数据类型的 DataFrame,列数可以分解为:

m=∑i=1kmim = \sum_{i=1}^{k} m_im=i=1kmi

其中 mim_imi 表示第 iii 种数据类型的列数。

import pandas as pd# 演示数学概念的实际应用
df_math = pd.DataFrame({'feature1': [1, 2, 3],'feature2': [4.1, 5.2, 6.3],'category': ['A', 'B', 'C'],'flag': [True, False, True]
})# 计算各种数据类型的列数
m = df_math.shape[1]  # 总列数
m_numeric = len(df_math.select_dtypes(include=['number']).columns)
m_categorical = len(df_math.select_dtypes(include=['object']).columns)
m_boolean = len(df_math.select_dtypes(include=['bool']).columns)print(f"总列数 m = {m}")
print(f"数值型列数 m_numeric = {m_numeric}")
print(f"分类型列数 m_categorical = {m_categorical}")
print(f"布尔型列数 m_boolean = {m_boolean}")
print(f"验证: m_numeric + m_categorical + m_boolean = {m_numeric + m_categorical + m_boolean}")

最佳实践和错误处理

import pandas as pddef safe_get_column_count(df, df_name="DataFrame"):"""安全获取 DataFrame 列数,包含错误处理"""if df is None:print(f"错误: {df_name} 为 None")return 0try:column_count = df.shape[1]print(f"{df_name} 的列数为: {column_count}")return column_countexcept AttributeError:print(f"错误: {df_name} 不是 pandas DataFrame")return 0except Exception as e:print(f"获取 {df_name} 列数时发生错误: {e}")return 0# 测试各种情况
print("=== 安全列数获取测试 ===")# 正常情况
normal_df = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
safe_get_column_count(normal_df, "正常DataFrame")# None 情况
safe_get_column_count(None, "空DataFrame")# 非DataFrame情况
safe_get_column_count([1, 2, 3], "列表")# 空DataFrame
empty_df = pd.DataFrame()
safe_get_column_count(empty_df, "空DataFrame")
http://www.dtcms.com/a/353504.html

相关文章:

  • 高通平台蓝牙学习-- 基于WCN685x 的蓝牙低功耗(LE)功能
  • 浏览器与计算机网络
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘click’问题
  • k8s部署pgsql集群
  • 【Spring Cloud 微服务】5.架构的智慧枢纽:深度剖析 Nacos 注册中心
  • K8s持久化存储:PV与PVC
  • K8s 二次开发漫游录
  • 前端-npm和yarn的区别
  • 时序数据库的 LSM 树介绍
  • 计算机网络——DNS,ARP,RARP,DHCP,ICMP
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘websockets’问题
  • 时序数据库全景指南:从场景选型到内核拆解
  • Linux(十九)——CPU、I/O、网络与内核参数调优指南
  • 字库原理 GB2312-80
  • rk3588开发板最新kernel6.1下载(RK3588SDK源码下载)和环境搭建
  • 基于结构化码本的分层DNN框架用于高效语音增强
  • 第18章|变量:把数据装进“盒子”的正确方式
  • 【STM32】将 FreeRTOS移植到STM32F103RCT6 详细流程
  • 【开发配置】GitLab CR(Code Review)规则配置清单
  • 论文翻译:BRILLM: BRAIN-INSPIRED LARGE LANGUAGE MODEL
  • 在Excel和WPS表格中通过查找替换对单元格批量强制换行
  • 【C++】map 容器的使用
  • 论文阅读:Gorilla: Large Language Model Connected with Massive APIs
  • Python基础:PyMySQL
  • 音视频开发学习路线梳理(附 GitHub 仓库)
  • 达梦数据库-控制文件 (二)
  • FPGA开发流程
  • 一键搭建开发环境:制作bash shell脚本
  • Apple Silicon Mac 上解决 Docker 平台不匹配和 QEMU 段错误问题
  • 腾讯云服务器重启卡住:原因分析与底层原理详解