Pandas是数据分析中经常用到的一个知识模块,我会用知识点+例子的方法给大家细讲Pandas。
1.创建、展示数据
创建数据框 pd.DataFrame({ ‘k1’:v1, ‘k2’:v2’, ‘k3’:v3 })
展示数据 df.head()
name = [‘赵一’,‘钱二’,‘孙三’,‘李四’,‘周五’,‘吴六’,‘郑七’]
s1 = [80,99,98,65,32,33,85]
s2 = [77,85,95,62,0,53,25]
address = [‘兰州’,‘成都’,‘贵阳’,‘拉萨’,‘长春’,‘沈阳’,‘上海’]
s1,s2,address --> 值,
name --> 索引,
[‘score1’,‘score2’,‘address’] --> 列名
创建数据框df,只展示前5行
name = ['赵一','钱二','孙三','李四','周五','吴六','郑七']
s1 = [80,99,98,65,32,33,85]
s2 = [77,85,95,62,0,53,25]
address = ['兰州','成都','贵阳','拉萨','长春','沈阳','上海']
df = pd.DataFrame({'score1':s1,'score2':s2,'address':address},index=name)
df.head(5)
# df.info()
2.重建索引、赋值
重建索引 reindex()
赋值 df.loc[‘index’, [‘k1’, ‘k2’] ] = [v1, v2]
重建索引:[‘赵一’,‘钱二’,‘孙三’,‘李四’,‘周五’,‘钱多多’]为索引创建新的数据框df1
赋值:补充 钱多多 的 score1 和 address 为 60、厦门
df1 = df.reindex(['赵一','钱二','孙三','李四','周五','钱多多']) # 重建索引
df1.loc['钱多多',['score1','address']] = [60,'厦门']
3.列的增减
增加列
#df1上,增加列’class’,表示班级,全为’数科1班’
df1['class'] = '数科1班'
删除列
删除address列
del df1['address'] # 通过del删除
df1.drop(columns='address',inplace=True) # 通过drop()函数删除
4.缺失值检查 isnull()
df.isnull() # 全部
np.any(df.isnull()) # 全部
np.any(df.isnull(),0) #按列
np.any(df.isnull(),1) #按行
5.函数应用
applymap()
用applymap()实现将所有成绩改成10分制,
eg:32分 --> 3分
缺失值返回0
def f(x):
try:
return int(x/10)
except:
return 0
df1.iloc[:,:-1] = df1.iloc[:,:-1].applymap(f)
6.索引、切片
loc
输出df1中李四到钱多多三个同学的成绩数据
df1.loc['李四','钱多多']
布尔索引
用布尔索引查找score1和score2都不小于6的同学的数据
df1[(df1.score1>=6) & (df1.score2>=6)]
7.广播机制
score_add = [2,1,0,1,2,3,3]
创建score_add为值,索引与df1相同的Series,记做s3;
将score1列和score2列的成绩都加上s3
score_add = [2,1,0,1,2,3]
s3 = pd.Series(score_add, index = df1.index)
# df1的所有score1和score2都加上s3:add(s3,axis=0)
df1[['score1','score2']] = df1[['score1','score2']].add(s3,axis=0) # 按列
8.归约
输出每个同学的平均分,记为result
result = df1[['score1','score2']].mean(axis=1)
pd.DataFrame(result,columns=['平均分'])
9.排序、排名 DataFrame.rank() 、DataFrame.sort_values()
输入每个人的平均分排名,同样的分数排名相同,如第1名,第2名,第3名,第3名,第5名…
将该结果作为df1的新列score_rank,将数据df1按照刚才的排名顺序排列
DataFrame.rank(method=‘average’, ascending=True)
DataFrame.sort_values(by=‘ *** ', ascending=True, inplace=False)
df1['score_rank'] = result.rank(method='min',ascending=False)
df1.sort_values(by='score_rank')
10.描述性统计
输出df1的简单描述统计量 --> describe()
找出score_rank有哪些不同取值 --> unique()
各取值分别有多少人 --> value_counts()
df1.describe()
df1.info()
df1.score_rank.unique()
df1.score_rank.value_counts()
以上便是我根据日常实验整理出来的一些pandas知识点,如有错误,还请各位大佬指点。