Pandas-DataFrame详细总结 | ||||
格式 | 含义 | 举例 | 结果 | |
DataFrame 创建 | 包名.DataFrame() | 创建DataFrame对象 | df1 = pd.DataFrame(data={ 'nid':[1,2,3,4], 'name':['温蒂','纳兹','露西','格雷'], 'age':[15,19,19,19]}, index=['A', 'B', 'C', 'D']) print(df1) | 结果为: nid name age (列名) A 1 温蒂 15 B 2 纳兹 19 C 3 露西 19 D 4 格雷 19 (索引列) |
DataFrame 常用 属性 | 对象.shape | 维度(数据是几行几列) | df1 = pd.DataFrame(data={ 'nid':[1,2,3,4], 'name':['温蒂','纳兹','露西','格雷'], 'age':[15,19,19,19]}, index=['A', 'B', 'C', 'D']) print(df1.shape) | 结果为:(4,3) |
对象.size | 数据个数:行数*列数 | print(df1.size) | 结果为:12 | |
对象.values | 查看DataFrame对象所有的值 | print(df1.values) | 结果为: [[1 '温蒂' 15] [2 '纳兹' 19] [3 '露西' 19] [4 '格雷' 19]] | |
对象.ndim | 查看数组轴 | print(df1.ndim) | 结果为:2 | |
对象.index | 查看所有的行索引 | print(df1.index) | 结果为: Index(['A', 'B', 'C', 'D'], dtype='object') | |
对象.dtypes | 查看每列的元素类型 | print(df1.dtypes) | 结果为: nid int64 name object age int64 dtype: object | |
DataFrame 常用 方法 | 对象.info() | 查看完整信息 | print(df1.info()) | 结果为: <class'pandas.core.frame.DataFrame'>Index: 4 entries, A to D Data columns (total 3 columns): # Column Non-Null Count Dtype 0 nid 4 non-null int64 1 name 4 non-null object 2 age 4 non-null int64 dtypes: int64(2), object(1) memory usage: 128.0+ bytes None |
对象.descripe() | 查看详细信息, : 每列的平均值, 标准差, 最小值, 四分之一位, 二分之一位(中分位), 四分之三位, 最大值. 默认只展示了: 数字列. | print(df1.descripe) 还有以下筛选的写法,下面的不做结果展示: df1.describe(exclude=['int']) exclude: 不展示的 df1.describe(exclude=['int', 'float']) df1.describe(include='all')# 默认展示: 所有列 | 结果为: nid age count 4.000000 4.0 mean 2.500000 18.0 std 1.290994 2.0 min 1.000000 15.0 25% 1.750000 18.0 50% 2.500000 19.0 75% 3.250000 19.0 max 4.000000 19.0 | |
对象.head() | 默认查看前5个值,可设置 查看的行数,并打印类型 | print(df1.head(n=2)) # 获取 前 2 条数据 | 结果为: nid name age A 1 温蒂 15 B 2 纳兹 19 | |
对象.tail() | 默认查看后5个值,可设置 查看的行数,并打印类型 | print(df1.tail(n=2) ) # 获取 后 2条数据 | 结果为: nid name age C 3 露西 19 D 4 格雷 19 | |
len(对象名) | 统计所有行数, | len(df1) | 结果为:4 | |
对象.count() | 统计每列的非空值条目数 | print(df1.count()) | 结果为: nid 4 name 4 age 4 dtype: int64 | |
对象.max() | 统计每列的最大值 | print(df1.max()) | 结果为: nid 4 name 露西 age 19 dtype: object | |
对象.min() | 统计每列的最小值 | print(df1.min()) | 结果为: nid 1 name 格雷 age 15 dtype: object | |
对象.mean() | 统计每列的平均值, 只针对于数字列有效. | print(df1.mean()) | 结果为: nid 2.5 age 18.0 dtype: float64 | |
对象.sum() | 统计每列的和 | print(df1.sum()) | 结果为: nid 10 name 温蒂纳兹露西格雷 age 72 dtype: object | |
DataFrame 布尔索引 | 对'行'操作,True则显示,False则不显示 | print(df1[[True,False,False,True]]) | 结果为: nid name age A 1 温蒂 15 D 4 格雷 19 | |
也可进行检索 | print(df1[df1.age > df1.age.mean()] ) | 结果为: nid name age B 2 纳兹 19 C 3 露西 19 D 4 格雷 19 | ||
DataFrame 运算 | df对象和数值运算, 则:数值会依次和df对象的每个值进行运算 | print((df1.head(2))*2) | 结果为: nid name age A 2 温蒂温蒂 30 B 4 纳兹纳兹 38 | |
df对象和df对象直接做运算. | print(df1.head(2)+df1.head(2)) | 结果为: nid name age A 2 温蒂温蒂 30 B 4 纳兹纳兹 38 | ||
两个df做运算,行索引不一致的用NaN填充. | print(df1+df1[:2]) | 结果为: nid name age A 2.0 温蒂温蒂 30.0 B 4.0 纳兹纳兹 38.0 C NaN NaN NaN D NaN NaN NaN | ||
索引列的操作 | 通过 set_index()函数 设置行索引名字,设置的名字要在列名中存在 | df2=df1.set_index('nid') print(df2) | 结果为: name age nid 1 温蒂 15 2 纳兹 19 3 露西 19 4 格雷 19 | |
加载数据的时候, 直接指定索引列 | 使用index_col='要设置的索引名’ | |||
通过reset_index()函数, 可以重置索引 | df2.reset_index(inplace=True) print(df2) | 结果为: nid name age 0 1 温蒂 15 1 2 纳兹 19 2 3 露西 19 3 4 格雷 19 | ||
修改行名和列名 | 方式一:df对象.rename(index=新的索引列-列表形式, columns=新的列名-列表形式) | print(df1.rename(index={'A':'abc'}, columns={'nid':'fid'})) | 结果为: fid name age abc 1 温蒂 15 B 2 纳兹 19 C 3 露西 19 D 4 格雷 19 | |
方式二:直接加载出索引列和列名,并修改. | 这里演示行索引的修改。df1.index=['A','b','c','d'] print(df1) | 结果为: nid name age A 1 温蒂 15 b 2 纳兹 19 c 3 露西 19 d 4 格雷 19 | ||
添加、插入和删除列 | 添加列默认是在: 末尾添加列的. 格式为: df对象['列名'] = 值,整个列都会等于这个值 | df1['school']='Fairy tail' print(df1) | 结果为: nid name age school A 1 温蒂 15 Fairy tail B 2 纳兹 19 Fairy tail C 3 露西 19 Fairy tail D 4 格雷 19 Fairy tail | |
df对象.drop('列名', axis = 'columns,inplace = True) 按列删除 df对象.drop([行索引值1, 行索引值2...]) 按行索引删除 | df1.dop('school',axis='columns',inplace = True) print(df1) 行索引删除就不展示了 | 结果为: nid name age A 1 温蒂 15 B 2 纳兹 19 C 3 露西 19 D 4 格雷 19 | ||
insert(), 在指定位置插入列, 参1: 插入位置(索引, 从0开始), 参2: 列名, 参3: 列值 | df1.insert(loc=1,column='gender',value='女') print(df1) | 结果为: nid gender name age A 1 女 温蒂 15 B 2 女 纳兹 19 C 3 女 露西 19 D 4 女 格雷 19 | ||
导出数据 | df.to_数据格式('目的地路径', index=False)导出不带索引列 | tsv文件的格式是 df.to_csv('目的地路径',sep='\t') | ||
导入数据 | df对象=pd.read_数据格式('数据源文件路径', ....) | tsv文件的格式是 df=pd.read_csv('目的地路径',sep='\t') | ||
加载一 列数据 | df.列名或者df['列名'] | df1.nid/df1['nid'] | 结果为: A 1 B 2 C 3 D 4 Name: nid, dtype: int64 | |
加载多 列数据 | df[[列名1, 列名2, 列名3]] | df1[['nid','name']] | 结果为: nid name A 1 温蒂 B 2 纳兹 C 3 露西 D 4 格雷 | |
获取指定行、列的数据 | 加载指定行, 指定列, 都是通过 loc 和 iloc 属性实现的 loc: 接收的是 行索引(包左包右), 列名 | print(df1.loc[:1,['nid','name']]) | 结果为: nid name A 1 温蒂 B 2 纳兹 | |
iloc: 接收的是行号, 列的编号(从0计数)(都是包左不包右) | print(df1.iloc[:3,:2]) | 结果为: nid name A 1 温蒂 B 2 纳兹 C 3 露西 | ||
分组聚合 | 使用DataFrame的groupby方法完成分组/聚合计算 df.groupby(['分组列1','分组列2'...])[[要进行聚合的列1, 列2...]].聚合函数() df.groupby(['分组列1', '分组列2'...]).agg({'列名':'聚合函数名', '列名':'聚合函数名'}) | 演示一种:df1.groupby('age')['nid'].mean() | 结果为: | |
绘制图表 | df1.groupby('age')['nid'].mean().plot() | 结果为: | ||
常见的 排序方式 | nlargest()函数:nlargest(数据条数, '要统计的列') 降序排 | print(df1.nlargest(1,'age')) | 结果为: nid name age B 2 纳兹 19 | |
nsmallest()函数:nsmallest(数据条数, '要统计的列') 升序排 | print(df1.nsmallest(1,'age')) | 结果为: nid name age A 1 温蒂 15 | ||
sort_values() | df1.sort_values('age',ascending=False).head(3) | 结果为: nid name age B 2 纳兹 19 C 3 露西 19 D 4 格雷 19 | ||
分组统计时将as_index=False加进去就可以不把分组的列当做索引列 |
Pandas—DataFrame对象创建、常用属性、方法、运算、布尔类型、排序等等详解
本文详细介绍了如何使用PandasDataFrame进行数据处理,包括DataFrame对象的创建、常用属性查看、数据筛选、运算、分组与聚合,以及图表绘制和排序功能。
摘要由CSDN通过智能技术生成