pandas基础操作
- Series类
- 1 创建
- 2 查找与切片
- 3 增加删除
- 4 数学运算
- DataFrame类
- 1 构造和访问
- 2 切片
- 3 分析统计
- 4 增删和修改
- 5 文件操作
- 分组求和
Series类
series是以为表格,每个元素带有标签且有下标,兼具列表和字典的访问形式
1 创建
In [13]: import pandas as pd
In [14]: pd.Series(data=[80,90,100],index=['语文','数学','英语'])
Out[14]:
语文 80
数学 90
英语 100
dtype: int64
2 查找与切片
a = pd.Series(data=[80,90,100],index=['语文','数学','英语'])
In [20]: a
Out[20]:
语文 80
数学 90
英语 100
dtype: int64
In [21]: a[0]
Out[21]: 80
In [22]: a['语文']
Out[22]: 80
In [23]: a[0:2]
Out[23]:
语文 80
数学 90
In [25]: a[0:2]['语文']
Out[25]: 80
In [26]: a.index
Out[26]: Index(['语文', '数学', '英语'], dtype='object')
3 增加删除
#增加元素
In [27]: a['体育']=60
In [28]: a
Out[28]:
语文 80
数学 90
英语 100
体育 60
dtype: int64
#删除元素
In [29]: a.pop('体育')
Out[29]: 60
In [30]: a
Out[30]:
语文 80
数学 90
英语 100
dtype: int64
4 数学运算
In [33]: a
Out[33]:
语文 80
数学 90
英语 100
dtype: int64
In [34]: a.sum()
Out[34]: 270
In [35]: a.max()
Out[35]: 100
In [36]: a.min()
Out[36]: 80
In [37]: a.mean()
Out[37]: 90.0
In [38]: a.median()
Out[38]: 90.0
#输出下标
In [39]: a.idxmax()
Out[39]: '英语'
In [40]: a.idxmin()
Out[40]: '语文'
DataFrame类
1 构造和访问
In [41]: scores = [['男',108,115,97],['女',115,87,105],['女',100,60,130],^M
...: ['男',112,80,50]]^M
...: names = ['刘一哥','王二姐','张三妹','李四弟']^M
...: courses = ['性别','语文','数学','英语']^M
...:
In [42]: df = pd.DataFrame(data=scores,index = names,columns = courses)^M
...:
In [43]: df
Out[43]:
性别 语文 数学 英语
刘一哥 男 108 115 97
王二姐 女 115 87 105
张三妹 女 100 60 130
李四弟 男 112 80 50
In [49]: df.values
Out[49]:
array([['男', 108, 115, 97],
['女', 115, 87, 105],
['女', 100, 60, 130],
['男', 112, 80, 50]], dtype=object)
#访问行
In [53]: df.loc['王二姐']
Out[53]:
性别 女
语文 115
数学 87
英语 105
Name: 王二姐, dtype: object
#访问列
In [51]: df['语文']
Out[51]:
刘一哥 108
王二姐 115
张三妹 100
李四弟 112
Name: 语文, dtype: int64
2 切片
#1行切片
#1.1iloc[行选择器, 列选择器] 用下标做切片
In [55]: df.iloc[1:3]
Out[55]:
性别 语文 数学 英语
王二姐 女 115 87 105
张三妹 女 100 60 130
#1.2 #loc[行选择器, 列选择器] 用标签做切片
In [57]: df.loc['王二姐':'张三妹']
Out[57]:
性别 语文 数学 英语
王二姐 女 115 87 105
张三妹 女 100 60 130
#列切片
In [59]: df.loc[:,'性别':'数学']
Out[59]:
性别 语文 数学
刘一哥 男 108 115
王二姐 女 115 87
张三妹 女 100 60
李四弟 男 112 80
In [60]: df.iloc[:,1:3]
Out[60]:
语文 数学
刘一哥 108 115
王二姐 115 87
张三妹 100 60
李四弟 112 80
3 分析统计
#转置
In [61]: df.T
Out[61]:
刘一哥 王二姐 张三妹 李四弟
性别 男 女 女 男
语文 108 115 100 112
数学 115 87 60 80
英语 97 105 130 50
#按语文成绩降序排列
In [62]: df.sort_values('语文',ascending=False)
Out[62]:
性别 语文 数学 英语
王二姐 女 115 87 105
李四弟 男 112 80 50
刘一哥 男 108 115 97
张三妹 女 100 60 130
print(df.sum()['语文'],df.mean()['数学'],df.median()['英语'])
#>>435 85.5 101.0 语文分数之和、数学平均分、英语中位数
print(df.min()['语文'],df.max()['数学'])
#>>100 115 语文最低分,数学最高分
print(df.max(axis = 1)['王二姐']) #>>115 王二姐的最高分科目的分数
print(df['语文'].idxmax()) #>>王二姐 语文最高分所在行的标签
#打印出语文>100且数学>85的所有行
In [63]: print(df.loc[(df['语文'] > 100) & (df['数学'] >= 85)]) ^M
...:
性别 语文 数学 英语
刘一哥 男 108 115 97
王二姐 女 115 87 105
4 增删和修改
- 增加和修改
print("---下面是DataFrame的增删和修改---")
df.loc['王二姐','英语'] = df.iloc[0,1] = 150 #修改王二姐英语和刘一哥语文成绩
df['物理'] = [80,70,90,100] #为所有人添加物理成绩这一列
df.insert(1,"体育",[89,77,76,45]) #为所有人插入体育成绩到第1列
In [65]: df
Out[65]:
性别 体育 语文 数学 英语
刘一哥 男 89 108 115 97
王二姐 女 77 115 87 105
张三妹 女 76 100 60 130
李四弟 男 45 112 80 50
df.loc['李四弟'] = ['男',100,100,100,100,100] #修改李四弟全部信息
df.loc[:,'语文'] = [20,20,20,20] #修改所有人语文成绩
df.loc['钱五叔'] = ['男',100,100,100,100,100] #加一行
df.loc[:,'英语'] += 10 #>>所有人英语加10分
df.columns = ['性别','体育','语文','数学','English','物理'] #改列标签
In [70]: df.columns=['性别','体育','语文','数学','Engilsh']
In [71]: df
Out[71]:
性别 体育 语文 数学 Engilsh
刘一哥 男 89 108 115 97
王二姐 女 77 115 87 105
张三妹 女 76 100 60 130
李四弟 男 45 112 80 50
- 删除
df.drop( ['体育','物理'],axis=1, inplace=True) #删除体育和物理成绩
df.drop( '王二姐',axis = 0, inplace=True) #删除 王二姐那一行
df.drop([df.index[i] for i in range(1,3)],axis=0,inplace = True)
#删除第1,2行
df.drop([df.columns[i] for i in range(3)],axis = 1,inplace = True) #删除第0到2列
5 文件操作
- pd.read_excel 读取文档
dt = pd.read_excel("excel_sample.xlsx",sheet_name=['销售情况',1],
index_col=0)#读取第0和第1张工作表,设置索引为第0列
df = dt['销售情况'] #dt是字典,df是DataFrame
print(df.iloc[0,0],df.loc['睡袋','数量']) #>>4080 4080
print(pd.isnull(df.loc['彩盒','销售额'])) #>>True
df.fillna(0,inplace=True) #将所有NaNa用0替换
print(df.loc['彩盒','销售额'],df.iloc[2,2]) #>>0.0 0.0
- df.to_excel(filename,sheet_name=“sheet1”,na_rep=‘’…)写入文档
writer = pd.ExcelWriter("new.xlsx") #创建ExcelWriter对象
df.to_excel(writer,sheet_name="S1")
df.T.to_excel(writer,sheet_name="S2") #转置矩阵写入
df.sort_values('销售额',ascending= False).to_excel(writer,
sheet_name="S3")
#按销售额排序的新DataFrame写入工作表S3
df['销售额'].to_excel(writer,sheet_name="S4") #只写入一列
writer.save()
分组求和
df3 = df2.groupby(['产品类别'])[['数量','销售额','成本']].sum()