Pandas—DataFrame对象创建、常用属性、方法、运算、布尔类型、排序等等详解

本文详细介绍了如何使用PandasDataFrame进行数据处理,包括DataFrame对象的创建、常用属性查看、数据筛选、运算、分组与聚合,以及图表绘制和排序功能。
摘要由CSDN通过智能技术生成
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  (列名)
   1   温蒂   15
B    2   纳兹   19
   3   露西   19
   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加进去就可以不把分组的列当做索引列
  • 22
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值