
前言DataFrame是 Pandas 最核心的二维表格结构类似 Excel 表格拥有行索引、列名、多行多列日常数据分析、表格处理全部依赖它。本文结合完整实操代码分两大模块讲解DataFrame 多种创建方法、DataFrame 常用基础属性顺带区分索引常用语法。一、DataFrame 的多种主流创建方式方式 1最常用 —— 字典列表创建日常做表首选字典的key对应列名value是列表存储每一列所有数据还能自定义行索引、手动指定列的展示顺序。# 1. 准备数据 info { name:[水冷哥,深情哥,紫琪,德华], gender:[女,男,保密,保密], age:[81,80,66,55] } # 2. 把上述的数据集封装成DataFrame对象 df1 pd.DataFrame(datainfo) df1重点细节index自定义行标签不再使用默认 0/1/2 数字columns强制修改列展示顺序哪怕字典内顺序不同表格列以 columns 为准。方式 2用列表 元组创建二维结构直接转表当数据本身是二维结构如列表套列表、列表套元组时可以直接交给 DataFrame再通过columns指定列名。# 1. 准备数据 info [ (刘亦菲,女,39), (迪丽热巴,女,31), (王志奇,未知,66) ] # 2. 把上述的数据集封装成DataFrame对象 df2 pd.DataFrame(data info,columns[name,sex,age]) df2运行效果每一行小列表 / 小元组自动成为一行配合columns即可得到规范表格。方式 3用 numpy 的 ndarray 创建科学计算无缝衔接numpy 的二维数组ndarray与 DataFrame 结构天然契合直接传入即可适合从科学计算场景过渡到表格分析。import numpy as np # 1. 创建numpy的ndarray对象 arr1 np.arange(12).reshape(3,4) arr1 # 2. 把上述的ndarray对象封装成DataFrame对象 df3 pd.DataFrame(dataarr1,columns[a,b,c,d]) df3运行效果二维数组的每一行成为表格的一行每一列成为一列由于元素都是数字各列 dtype 自动识别为整数。方式 4用多个 Series 组装 DataFrameSeries 是一维序列我们可以把多个 Series 打包成字典键为列名值为 Series快速拼成表格。import pandas as pd # 构建两个一维Series s1 pd.Series([1,2,3,4,5]) s2 pd.Series([6,7,8,9,10]) # 字典key列名valueSeries df4 pd.DataFrame({第一列:s1,第二列:s2}) df4运行效果自动生成两行列行默认 0、1、2、3、4 数字索引。实例生成 10 名同学、5 门功课的成绩表下面补充一个更贴近实际场景的实例生成 10 名同学、5 门功课的成绩表成绩范围 40~100。# 1. 生成10名同学5门功课的成绩成绩范围40 ~ 100 score_df pd.DataFrame(np.random.randint(40,101,(10,5))) score_df # 2. 修改DataFrame对象的 列名 和 索引列值 column_names[语文,数学,英语,政治,体育] index_names[同学str(i) for i in range(score_df.shape[0])] # 3. 具体的修改DataFrame对象 列名 和 索引值 score_df.columns column_names score_df.index index_names # 4. 打印修改后的结果 score_df二、DataFrame 核心基础属性必背拿到表格后常用属性查看结构、尺寸、数据详情下面逐个拆解print(完整表格) print(df) 1. 行索引、列标签 print(\n1. 行索引index,df.index) print(2. 列标签columns,df.columns) 2. 表格所有原始值二维numpy数组 print(\n3. 表格所有值values\n,df.values) 3. 维度、行列形状、总元素数量 print(\n4. 维度ndim,df.ndim) # DataFrame永远是2维 print(5. 形状shape(行数,列数),df.shape) print(6. 总元素个数size,df.size) 4. 每一列的数据类型 print(\n7. 各列数据类型dtypes\n,df.dtypes)表格属性作用本例结果index获取全部行标签Index([a,b,c,d,e,f], dtypeobject)columns获取全部列名Index([name, score, age], dtypeobject)values把表格转为二维数组去掉行列名只剩纯数字 / 字符串ndim维度DataFrame 固定 2二维shape(总行数总列数)(6,3) 6 行 3 列size单元格总数6*318dtypes每一列的数据类型name 字符串score 浮点age 整数三、补充DataFrame 四大索引取值语法配套巩固创建完表格离不开取数区分标签索引和位置索引loc[行标签,列标签]按名字取标签索引支持切片a:c首尾都包含iloc[行下标,列下标]按数字位置取0 开始切片左闭右开0:3只取 0/1/2at[行标签,列标签]只取单个单元格速度更快iat[行号,列号]按数字位置取单个单元格举例精简总结# 整行获取 df.loc[c] # 取标签为c的一整行 df.iloc[2] # 取下标2的一整行 整列获取 df[name] # 返回Series一维 df[[name]] # 返回DataFrame二维 df.iloc[:,0] # 下标0所有行 单个单元格 df.at[c,score] df.iat[2,1]四、行列转置 T 属性使用.T可以实现表格行列互换行变列、列变行。tdf df.T print(\n【表格转置】) print(tdf) print(转置后行,tdf.index) print(转置后列,tdf.columns)原列名变成转置后的行索引原行标签变成转置后的列索引。适合行列数据需要互换统计的场景。五、新手高频踩坑总结df[数字]不能取列df[]单数字会被识别成列名不是下标取数字列必须用ilocloc 切片闭区间iloc 切片左闭右开at/iat 只能取单个格子不能取多行多列多行多列只用 loc/iloc创建表格时 columns 可以强行重排列顺序index 自定义行名方便业务识别。完整可运行汇总代码import pandas as pd 通过Series来创建 s1 pd.Series([1,2,3,4,5]) s2 pd.Series([6,7,8,9,10]) df pd.DataFrame({第一列:s1,第二列:s2}) print(df) 通过字典来创建 df pd.DataFrame({ name:[tom,tom,jack,alice,bob,allen], age:[15,15,15,20,26,30], score:[60.5,60.5,80,30.6,70,83.5] },index[a,b,c,d,e,f],columns[name,score,age]) print(df) 基础属性 print(行索引,df.index) print(列标签,df.columns) print(值\n,df.values) print(维度,df.ndim) print(形状,df.shape) print(元素个数,df.size) print(数据类型\n,df.dtypes) #loc iloc at iat 取值演示 print(标签c行\n,df.loc[c]) print(位置2行\n,df.iloc[2]) print(标签a-c行\n,df.loc[a:c]) print(位置0~3行\n,df.iloc[0:3]) print(\nname列Series\n,df[name]) print(\nname列DataFrame\n,df[[name]]) print(\niloc按下标取第0列\n,df.iloc[:,0]) 单个单元格 print(df.at[c,score]) print(df.loc[c,score]) print(df.iat[4,1]) print(df.iloc[4,1]) 转置 tdf df.T print(tdf)