pandas数据分析

1.Series对象

(1)定义和创建
(2)数据访问
(3)常用方法

(1)定义和创建

     Series 对象是一种带有标签数据的一维数组,标示签在Pandas中有对应的数据类型“Index”,Series类似于一维数组与字典的结合。

In [1]:

#导入库
import pandas as pd  #导入数据分析库pandas 别名为pd
import numpy as np  #导入科学计算库numpy 别名为np
import matplotlib.pyplot as plt  #导入数据可视化库matplotlib的模块pylot 别名为plt
In [2]:

data = pd.Series([6,8,3,4,32],index = [ 'a','b','c','d','e'])  #创建对象data,默认标签序号为0,1,2...,但也可以自己定义
data
data = pd.Series([6,8,3,4,32],index = list('dfghe'))  #将字符串强行转换成列表
data
Out[2]:

d     6
f     8
g     3
h     4
e    32
dtype: int64
In [3]:

data.index  #访问标签,属性后面没有小括号
Out[3]:

Index(['d', 'f', 'g', 'h', 'e'], dtype='object')
In [4]:

data.values  #访问对象数据


Out[4]:
array([ 6,  8,  3,  4, 32], dtype=int64)
In [5]:

data.ndim  #维度
Out[5]:

1
In [6]:

data.shape  #Series对象的形状,返回的是元祖
Out[6]:

(5,)
In [7]:

data.size  #Series对象的个数
Out[7]:

5
In [8]:

names = ['aa','cc','dd','bb','ee']
ages = [56,45,89,32,65]
pd.Series(ages,names)
data = pd.Series({'aa':56,'cc':45,'dd':89,'bb':32,'ee':65})  #用字典{}"键值对"创建Series对象

print(data)  #打印对象内容

print(data)  #内容输出shuju,将被后面数据覆盖
aa    56
cc    45
dd    89
bb    32
ee    65
dtype: int64
aa    56
cc    45
dd    89
bb    32
ee    65
dtype: int64
In [9]:

data_1 = pd.Series(np.arange(10,30,5),index = list('abcd'))  #用科学计算库生产数据创建Series对象
data_1 
Out[9]:

a    10
b    15
c    20
d    25
dtype: int32
(2)数据访问
In [10]:

data_1.index
Out[10]:

Index(['a', 'b', 'c', 'd'], dtype='object')
In [11]:

data_1.values
Out[11]:

array([10, 15, 20, 25])
In [12]:

data_1.keys()  #作为字典键keys()方法访问
Out[12]:

Index(['a', 'b', 'c', 'd'], dtype='object')
In [13]:

list(data_1.items())  #作为键值对items()方法访问
Out[13]:

[('a', 10), ('b', 15), ('c', 20), ('d', 25)]
(3)常用方法
In [14]:

data.sort_values()  #根据对象数据排序
Out[14]:

bb    32
cc    45
aa    56
ee    65
dd    89
dtype: int64
In [15]:

data.sort_index()  #根据对象标签排序
Out[15]:

aa    56
bb    32
cc    45
dd    89
ee    65
dtype: int64
In [16]:

data.rank()  #根据对象数据排名
Out[16]:

aa    3.0
cc    2.0
dd    5.0
bb    1.0
ee    4.0
dtype: float64
In [17]:

data  #原有对象不变
Out[17]:

aa    56
cc    45
dd    89
bb    32
ee    65
dtype: int64
In [18]:

data[2]
Out[18]:

89

2.DataFrame对象

(1)定义和创建
(2)数据访问
(3)常用方法
(4)常见操作

(1)定义和创建
    DataFrame 可以看作是一种既有行索引,又有列索引的二维数组,类似于Excel表或关系型数据库中的二维表,是Pandas中最常用的基本结构。
In [19]:

names = ['aa','dd','ee','oo','ff']
ages = [45,87,65,32,54]
pd.Series(ages,names)
data_2 = pd.DataFrame({'姓名':names,'年龄':ages})
data_2
Out[19]:

姓名    年龄
0    aa    45
1    dd    87
2    ee    65
3    oo    32
4    ff    54
(2)数据访问
In [20]:

data_2[['姓名','年龄']]  #根据列名访问
Out[20]:

姓名    年龄
0    aa    45
1    dd    87
2    ee    65
3    oo    32
4    ff    54
In [21]:

data_2.年龄
Out[21]:

0    45
1    87
2    65
3    32
4    54
Name: 年龄, dtype: int64
In [22]:

data_2.年龄>50  #根据属性表达式判断数据返回逻辑值
Out[22]:

0    False
1     True
2     True
3    False
4     True
Name: 年龄, dtype: bool
In [23]:

data_2['年龄'][3]  #根据列名和标签访问具体数据
Out[23]:

32
In [24]:

data_2.loc[3,'姓名']  #根据列名显式索引访问
Out[24]:

'oo'
In [25]:

data_2.iloc[0:3,1:2]  #根据序号隐式索引访问
Out[25]:

年龄
0    45
1    87
2    65
(3)常用方法
(4)常见操作
(1)Pandas中的缺失值处理
(2)Pandas中的分组操作
(3)Pandas中的数据合并操作
In [26]:

#导入库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
In [27]:

#1.使用Pandas读取两个表格数据,并将其根据姓名进行合并:
data_1 = pd.read_excel('../Stu_pack/pandas/exer_1.xlsx',skiprows = 1)  #读取文件数据
data_2 = pd.read_excel('../Stu_pack/pandas/exer_2.xlsx',skiprows = 1)
#print(data_1)  #打印数据
#print(data_2)
data_2

data_3 = pd.merge(data_1,data_2)  #合并数据
data_3

#data_1.join(data_2.set_index('姓名'),on = '姓名')  #用join()方法合并
Out[27]:

姓名    性别    班级    语文    数学    英语    总分
0    Aa    男    2班    83    78    98    259
1    Bb    男    3班    67    93    56    216
2    Cc    女    3班    59    86    86    231
3    Dd    男    3班    75    60    59    194
4    Ee    女    3班    81    81    79    241
5    Ff    女    1班    68    67    95    230
6    Gg    女    1班    61    80    75    216
7    Hh    女    1班    89    70    96    255
8    Ii    女    3班    62    55    90    207
9    Jj    男    3班    68    91    94    253
10    Kk    女    2班    86    77    51    214
11    Ll    男    1班    88    72    78    238
12    Mm    男    2班    85    91    59    235
13    Nn    男    3班    80    65    76    221
14    Oo    女    3班    70    96    68    234
15    Pp    男    1班    76    78    98    252
16    Qq    女    1班    78    68    67    213
17    Rr    女    1班    78    68    67    213
18    Ss    女    2班    77    51    90    218
19    Tt    男    3班    67    98    99    264
20    Uu    女    3班    68    67    78    213
21    Vv    女    3班    98    77    51    226
22    Ww    女    3班    77    51    89    217
23    Xx    男    1班    89    89    67    245
24    Yy    女    1班    77    51    56    184
25    Zz    男    2班    56    68    67    191
In [29]:

#2.实现按总分 或 语文、数学、英语单科从高到低排序功能:
def sort(df,col):
    ss = df.sort_values(by = col,ascending = False)  #根据某一列的值(从高到低)排序
    return ss 

col = input('请输入您要排序的列名:')
sort(data_3,col)  #调用排序函数
请输入您要排序的列名:语文
Out[29]:

姓名    性别    班级    语文    数学    英语    总分
21    Vv    女    3班    98    77    51    226
23    Xx    男    1班    89    89    67    245
7    Hh    女    1班    89    70    96    255
11    Ll    男    1班    88    72    78    238
10    Kk    女    2班    86    77    51    214
12    Mm    男    2班    85    91    59    235
0    Aa    男    2班    83    78    98    259
4    Ee    女    3班    81    81    79    241
13    Nn    男    3班    80    65    76    221
17    Rr    女    1班    78    68    67    213
16    Qq    女    1班    78    68    67    213
18    Ss    女    2班    77    51    90    218
24    Yy    女    1班    77    51    56    184
22    Ww    女    3班    77    51    89    217
15    Pp    男    1班    76    78    98    252
3    Dd    男    3班    75    60    59    194
14    Oo    女    3班    70    96    68    234
20    Uu    女    3班    68    67    78    213
9    Jj    男    3班    68    91    94    253
5    Ff    女    1班    68    67    95    230
19    Tt    男    3班    67    98    99    264
1    Bb    男    3班    67    93    56    216
8    Ii    女    3班    62    55    90    207
6    Gg    女    1班    61    80    75    216
2    Cc    女    3班    59    86    86    231
25    Zz    男    2班    56    68    67    191
In [31]:

#3.打印所有存在不及格科目(单科<60)的学生记录:
data_2[(data_2['语文']<60) | (data_2['数学']<60) | (data_2['英语']<60)]  #用列表名判断某一列有不及格的行数据

data_2[(data_2.语文<60) | (data_2.数学<60) | (data_2.英语<60)]  #用属性索引判断某一列有不及格的行数据
Out[31]:

姓名    语文    数学    英语    总分
1    Bb    67    93    56    216
2    Cc    59    86    86    231
3    Dd    75    60    59    194
8    Ii    62    55    90    207
10    Kk    86    77    51    214
12    Mm    85    91    59    235
18    Ss    77    51    90    218
21    Vv    98    77    51    226
22    Ww    77    51    89    217
24    Yy    77    51    56    184
25    z    56    68    67    191

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值