python数据分析的两个库—pandas和numpy
初步接触这两个库时用了两个同事的日报和周报,感谢贤贤&lulu!!
跟随本文章码一遍,快速进入python处理数据时代!!!
Series(一维数据)
Series相当于一组数据,可以不设索引index;也可以设置索引一对一,允许索引重复----目前自我应用不多
import pandas as pd
from pandas import Series
s1 = Series(data=[1,2,2,3,5],index=['tom','lucy','bobo','jay','tom'],name='scored')
s1
得出结果
tom 1
lucy 2
bobo 2
jay 3
tom 5
Name: scored, dtype: int64
DataFrame(多特征数据,既有行索引,又有列索引)
重点关注,处理Excel数据时,DataFrame频繁应用
1. 读取Excel/csv文件
import pandas as pd
df1 = pd.read_csv('../111.csv',sep=',',engine = 'python',encoding = "utf-8-sig")
df2 = pd.read_excel('../bdsh_SMB_YTD.xlsx',sheet_name = "集团")
学号 姓名 科目 成绩
0 1 张1 英语 45
1 2 李2 政治 37
2 3 王3 数学 86
3 4 刘4 语文 68
4 5 赵5 NaN 72
5 6 子鼠 政治 90
6 7 丑牛 数学 83
7 8 寅虎 语文 78
8 9 卯兔 英语 69
9 10 辰龙 语文 39
如果出现utf-8 can’t read或者出现乱码时,可以改为GBK
2. 数据空值处理
# df1 = df.fillna('空白')
# 会在所有NaN处都填写上 空白 ----一般不采用
df['科目']= df['科目'].fillna('科目')
df['成绩']= df['成绩'].fillna(0)
df['成绩']= df['成绩'].apply(lambda x:x if x!=0 else 0)
df
读出结果
学号 姓名 科目 成绩
0 1 张1 英语 45.0
1 2 李2 政治 0.0
2 3 王3 数学 86.0
3 4 刘4 语文 68.0
4 5 赵5 科目 72.0
5 6 子鼠 政治 90.0
6 7 丑牛 数学 83.0
7 8 寅虎 语文 78.0
8 9 卯兔 英语 69.0
9 10 辰龙 语文 0.0
3. 数据筛选和列标题重置
#更改科目为英语和科目的成绩为90
df.loc[(df['科目'].isin(['英语','科目'])), '成绩'] = 90
#筛选姓名/科目/成绩三列
df1=df[['姓名','科目','成绩']]
#更改df1中列名
df1.rename(columns={'姓名': '学生姓名','科目': '学科'}, inplace=True)
df1
得出结果
学生姓名 学科 成绩
0 张1 英语 90.0
1 李2 政治 0.0
2 王3 数学 86.0
3 刘4 语文 68.0
4 赵5 科目 90.0
5 子鼠 政治 90.0
6 丑牛 数学 83.0
7 寅虎 语文 78.0
8 卯兔 英语 90.0
9 辰龙 语文 0.0
4. 数据透视
score_avg = pd.pivot_table(df1,index=["学科"],values=["成绩"],aggfunc=np.mean)
score_avg.rename(columns={'成绩': '平均成绩'}, inplace=True)
score_avg.reset_index()
得出结果
学科 平均成绩
0 政治 45.000000
1 数学 84.500000
2 科目 90.000000
3 英语 90.000000
4 语文 48.666667
5. groupby用法
score_3 = df1.groupby(['学科'])['成绩'].agg('sum')
score_3.reset_index()
得出结果
学科 成绩
0 政治 90.0
1 数学 169.0
2 科目 90.0
3 英语 180.0
4 语文 146.0
6. merge用法
两个表中有同一列作为KEY,左/右/全连接成一张表
score = pd.merge(score_avg, score_3, on='学科', how='left')
score.reset_index()
得出结果
学科 平均成绩 成绩
0 政治 45.000000 90.0
1 数学 84.500000 169.0
2 科目 90.000000 90.0
3 英语 90.000000 180.0
4 语文 48.666667 146.0
版权声明:本文为Fancy_87原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。