使用python参加数学建模(Week1:基础库的学习之pandas)

pandas的数据结构主要有两种:series 和 DataFrame

系列(series):是一维数组,与numpy中的一维array类似只允许存储相同的数据类型,这样可以更加有效的使用存储空间,提高运算效率

DataFrame是二维数组,非常接近Excel中的电子表格或者MySQL数据库的形式,ta

的竖行为列(column)横行是index,数据的位置时通过column和index确定的,可以把DataFrame理解为series的容器

目录

一.series

1.创建一个系列series

2.从有位置的系列中访问数据

二.DataFrame

1.简单创建一个DataFrame

2.数据的选择和查看

3.条件语句的运用

4.函数的运用

5.分组的运用


一.series

1.创建一个系列series

import pandas as pd
import numpy as np
data = np.array(['a','b','c','d'],dtype=str)
s = pd.Series(data)
print('显示系列中的索引和数据')
print(s)
print()

data = np.arange(4)
t = pd.Series(data,index=['a','b','c','d'])
print('显示系列中的索引和数据')
print(t)

运行结果:

显示系列中的索引和数据
0    a
1    b
2    c
3    d
dtype: object

显示系列中的索引和数据
a    0
b    1
c    2
d    3
dtype: int32

2.从有位置的系列中访问数据

系列中的数据可以使用类似访问ndarray中的数据来访问

import numpy as np
import pandas as pd
print('系列中的索引和数据')
s = pd.Series([100,99,22,44,88],index=['liu','li','huang','du','zhang'])
print(s)
print()

print('系列中的第一个数据:',s[0])
print('系列中的第三个数据',s[2])
print()

print('系列中的前三个数据',s[:3])
print()
print('系列中的后三个数据',s[2:])

运行结果

系列中的索引和数据
liu      100
li        99
huang     22
du        44
zhang     88
dtype: int64

系列中的第一个数据: 100
系列中的第三个数据 22

系列中的前三个数据 liu      100
li        99
huang     22
dtype: int64

系列中的后三个数据 huang    22
du       44
zhang    88
dtype: int64

二.DataFrame

DataFrame是一个表格型的数据结构,它含有一组有序的列,每一列的数据结构都是相同的,而不同的列之间可以是不同的数据结构(数值,字符,布尔值)。或者以数据库进行类比,DataFrame中的每一行都是一个记录,名称为index的一个元素,而每一列为一个字段,是这个记录的一个属性。DataFrame即有行索引也有列索引。

1.简单创建一个DataFrame

import numpy as np
import pandas as pd
d = {'姓名':pd.Series(['小明','小红','小华','小李','小刘','小王','小张','小黄',]),
     '性别':pd.Series(['男','女','男','男','男','女','男','女'])
     ,'年龄':pd.Series(['12','12','14','15','18','18','17','19']),
     '成绩':pd.Series(['45','32','43','65','100','77','86','99'])}
df = pd.DataFrame(d)
print(df)

运行结果

   姓名 性别  年龄   成绩
0  小明  男  12   45
1  小红  女  12   32
2  小华  男  14   43
3  小李  男  15   65
4  小刘  男  18  100
5  小王  女  18   77
6  小张  男  17   86
7  小黄  女  19   99

2.数据的选择和查看

前面的列子是显示DataFrame中所有的数据,如果只需要显示‘姓名’的信息,应该如何操作?

只要在输出的时候把df改成为df['姓名']就可以了

同理如果要只输出性别可以这样  print(['性别'])

输出姓名和成绩就这样   print([['成绩','姓名']])

如果想要输出特定位置的数据可以这样

df.head(p)   p为个数  这条语句的意思是输出df中前p个数据信息  默认是五个

df.tail(p)   p为个数  这条语句的意思是输出df中后p个shuj信息  默认是五个

df[n:m]   显示第n+1到第m条的数据信息

import numpy as np
import pandas as pd
d = {'姓名':pd.Series(['小明','小红','小华','小李','小刘','小王','小张','小黄',]),
     '性别':pd.Series(['男','女','男','男','男','女','男','女'])
     ,'年龄':pd.Series(['12','12','14','15','18','18','17','19']),
     '成绩':pd.Series(['45','32','43','65','100','77','86','99'])}
df = pd.DataFrame(d)
print('输出姓名')
print(df['姓名'])
print()

print('只输出姓名和成绩')
print(df[['姓名','成绩']])
print()

print('只显示前几条数据信息')
print(df.head(3))
print()

print('只显示后几条数据信息')
print(df.tail())
print()

print('显示中间几条数据信息')
print(df[3:6])

3.条件语句的运用

要显示df中性别是女的数据信息

要显示df中及格的学生

要显示df中及格且性别是男生的学生

import numpy as np
import pandas as pd
d = {'姓名':pd.Series(['小明','小红','小华','小李','小刘','小王','小张','小黄',]),
     '性别':pd.Series(['男','女','男','男','男','女','男','女'])
     ,'年龄':pd.Series(['12','12','14','15','18','18','17','19']),
     '成绩':pd.Series(['45','32','43','65','100','77','86','99'])}
df = pd.DataFrame(d)
print('显示性别为女的数据信息')
print(df[df['性别'] == '女'])
print()
print('成绩及格的学生')
print(df[df['成绩'] >= '60'])
print()
print('显示性别为男成绩及格的男生')
print(df[(df['性别'] == '男') & (df['成绩'] > '60')])

运行结果

显示性别为女的数据信息
   姓名 性别  年龄  成绩
1  小红  女  12  32
5  小王  女  18  77
7  小黄  女  19  99

成绩及格的学生
   姓名 性别  年龄  成绩
3  小李  男  15  65
5  小王  女  18  77
6  小张  男  17  86
7  小黄  女  19  99

显示性别为男成绩及格的男生
   姓名 性别  年龄  成绩
3  小李  男  15  65
6  小张  男  17  86

4.函数的运用

将介绍下面几种函数

计算总和(sum)平均数(mean)标准偏差(std)max(最大值)min(最小值)

import numpy as np
import pandas as pd
d = {'姓名':pd.Series(['小明','小红','小华','小李','小刘','小王','小张','小黄',]),
     '性别':pd.Series(['男','女','男','男','男','女','男','女'])
     ,'年龄':pd.Series(['12','12','14','15','18','18','17','19']),
     '成绩':pd.Series([55,32,43,65,100,77,86,99])}
df = pd.DataFrame(d)
print('所有人成绩的总和是',df['成绩'].sum())
print('平均成绩是',df['成绩'].mean())
print('成绩最高的是',df['成绩'].max())
print('所有人成绩的标准偏差是',df['成绩'].std())

运行结果

所有人成绩的总和是 557
平均成绩是 69.625
成绩最高的是 100
所有人成绩的标准偏差是 25.263963607139264

5.分组的运用

进行分组需要用到groupby函数

下面以对df的性别为列

import numpy as np
import pandas as pd
d = {'姓名':pd.Series(['小明','小红','小华','小李','小刘','小王','小张','小黄',]),
     '性别':pd.Series(['男','女','男','男','男','女','男','女'])
     ,'年龄':pd.Series(['12','12','14','15','18','18','17','19']),
     '成绩':pd.Series([55,32,43,65,100,77,86,99])}
df = pd.DataFrame(d)
print('性别分组成功')
mysex = df.groupby('性别')
print(mysex['成绩'].agg([np.mean,np.max,np.min,np.sum]))

运行结果

性别分组成功
         mean  amax  amin  sum
性别                            
女   69.333333    99    32  208
男   69.800000   100    43  349

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值