当前位置:
首页 > temp > python入门教程 >
-
数据分析 Pandas 简介和它的的数据结构
本文主要讲Pandas 的Series和DataFrame 的相关属性和操作
1、Series的相关属性和操作 # --Series是一种类似于一维数组的对象,只能存放一维数组!由以下两部分组成: # value:一组数据 ndarray类型 # index:相关数据的索引标签 # # --Series 的创建: # (1)由列表或numpy数组创建:默认索引为0到n-1的整数索引, # (2)还可以通过index的参数指定索引 1.2、Series的索引和切片操作如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
import pandas as pd from pandas import Series,DataFrame # 创建一个Series,index=['a','b','c']为显示索引:增强可读性 s = Series(data=[1,2,3],index=['a','b','c']) #索引的使用:下面三种方式都可以 print(s.a) print(s[0]) print(s['a']) #----Series 的切片 print(s[0:1]) # --- 这种索引切片是不包含1的值的 print(s['a':'b']) print(s[[0,1]]) print(s[['a','b']]) |
1.3、Series 的相关函数及其特性 s.head(n) 查看前面n个值 s.tail(n) 分别查看后面n个值 s.unique() ---对Series a元素进行去重----
1
2
3
|
s = Series([1,1,3,5,7,7,9,45,65]) ns = s.unique() # ns 为 [1,3,5,7,9,45,65] print(ns) |
Series加法运算: 两个Series 数组必须索引相同才能相加成功,不然就会出现缺失数据 NaN 的情况
1
2
3
4
5
6
7
|
s1 = Series(data=[1,2,3],index=['a','b','c']) s2 = Series(data=[1,2,3],index=['a','d','c']) s = s1 + s2 print(s) # s的结果: a 2.0 # b NaN # c 6.0 # d NaN |
Series的索引可以为True/False: print(s[[True,False,True,False]]) # --- 发现:如果索引为 False 时,值不显示 s.isnull() # --- 判断s中每个元素是否为NaN ,等于NaN返回True s.notnull() # --- 判断s中每个元素是否不为NaN ,不等于NaN返回True #---批量过滤NaN值---------- print(s[s.notnull()]) # s.notnull()返回的 True/False 数组,作为 s[]的索引
----------------------------------------------------------------------------------------------------------
2、DataFrame 的相关属性和操作 ---定义:DataFrame 是一个表格,二维的数据结构 ---DataFrame == mydql的table ---设计初衷:将Series 的一维数据结构扩展到多维 ---DataFrame 既有行索引,还有列索引 行索引:index DataFrame会自动在每一行加上索引 列索引:columns 使用字典创建DataFrame后,columns参数将不可被使用 值:values 同Series 一样 传入的列与字典的键不匹配,则相应的值为NaN ---创建 DataFrame
1
2
3
4
5
6
7
|
import numpy as np df = DataFrame(data = np.random.randint(0,100,size=(3,4)),index=['a','b','c'],columns=['A','B','C','D']) print(df) # A B C D # a 45 63 88 52 # b 74 4 56 35 # c 58 22 14 25 |
2.2、DataFrame 的属性 :index columns values shape
print('返回所有的值(3行4列)',df.values) print('返回列索引',df.columns) print('返回行索引',df.index) 使用 ndarray 创建 DataFrame:创建一个表格用于展现张三李四的java/python 成绩:
1
2
3
4
5
6
|
data ={ '张三':[120,120,120], '李四':[22,34,34] } df = DataFrame(data= data,index=['语文','英语','数学']) print(df) |
--- 张三 李四
---语文 120 22
---英语 120 34
---数学 120 34
2.3、使用DataFrame 的索引操作 (1)、对列进行索引>>>>默认列索引
1
2
3
4
5
6
7
8
9
10
11
|
print(df['张三']) #语文 120 #英语 120 #数学 120 #Name: 张三, dtype: int64 print(df[['李四','张三']]) # --- 取两列,index取多列要加“[]” #李四 张三 #语文 22 120 #英语 34 120 #数学 34 120 |
(2)、对行进行索引 使用df.loc[]加index进行索引 --隐式索引 使用df.iloc[]加整数进行索引 --显式索引
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
print('使用df.loc[]加index进行索引',df.loc['语文']) #使用df.loc[]加index进行索引 #张三 120 #李四 22 Name: 语文, dtype: int64 print('使用df.loc[]取多行',df.loc[['语文','英语']]) # --- 取两行,index取多行要加“[]” #使用df.loc[]取多行 #张三 李四 #语文 120 22 #英语 120 34 print('使用df.iloc[]加整数进行索引',df.iloc[0]) #使用df.iloc[]加整数进行索引 #张三 120 #李四 22 Name: 语文, dtype: int64 print('使用df.iloc[]取多行',df.iloc[[0,1]]) # --- 取两行,index取多行要加“[]” #使用df.iloc[]取多行 # 张三 李四 #语文 120 22 #英语 120 34 |
(3)、对元素进行索引
默认df['张三']第一个索引为列索引,第二个为行索引
loc[] 第一个为行索引,第二个为列索引
1
2
3
4
5
6
7
8
|
print('对元素进行索引',df['张三']['语文']) #对元素进行索引 120 print('使用df.loc[]对元素索引',df.loc['英语']['张三']) #使用df.loc[]对元素索引 120 print('同上写法',df.loc['英语','张三']) #同上写法 120 |
(4)、取多个元素
“,”左边为行,右边为列
1
2
3
4
5
6
|
print( '使用df.loc[]取多个元素' ,df.loc[[ '英语' , '语文' ], '张三' ]) #使用df.loc[]取多个元素 #英语 120 #语文 120 #Name: 张三, dtype: int64 |
2.4、DataFrame 的切片操作
- 行切片: df[0:2]切片默认取得是行
1
2
3
4
|
print(df[0:2]) # 张三 李四 #语文 120 22 #英语 120 34 |
1
|
print(df[2]) ---取第二列 |
- 切片 iloc : “,”左边为行,右边为列
不加 “,” 默认取得是行
1
2
3
4
5
6
7
8
9
10
|
print(df.iloc[ 0 ]) --取第一行 print(df.iloc[- 1 ])--取最后一行 print(df.iloc[ 0 : 2 ]) --取的是第一第二行 print(df.iloc[:, 0 : 1 ]) --取第一列 print(df.iloc[ 2 , 3 ]) --取第二行第三列的数据 print(df.iloc[ 2 , 1 : 3 ]) --取索引未 2 的行第索引 1 到 3 的列 # 张三 # 语文 120 # 英语 120 # 数学 120 |
2.5、DataFrame 的运算操作
DataFrame 的运算和Series 一样:
在运算中自动对齐索引相同的数据
如果索引不对应就补NaN
重要:
使用python操作符:以行为单位操作(参数必须是行),对所有行都有效。
使用pandas操作函数:
- axis = 0 以列为单位操作(参数必须是列),对所有列都有效
- axis = 1 以行为单位操作(参数必须是行),对所有行都有效
- 注意:fill_value在df和series之间运算时,不能使用
练习:
1、假设ddd是期中考试成绩,ddd2是期末考试成绩,请自由创建ddd2,并将其与ddd相加,求期中期末平均值。
2、假设张三期中考试数学被发现作弊,要记为0分,如何实现?
3、李四因为举报张三作弊立功,期中考试所有科目加100分,如何实现?
4、后来老师发现有一道题出错了,为了安抚学生情绪,给每位学生每个科目都加10分,如何实现?
1
2
3
4
5
6
7
8
|
df1 = DataFrame(data=np.random.randint(0,100,size=(5,3)), index=list("ABCDE"), columns=["python","java","php"]) df2 = DataFrame(data=np.random.randint(0,100,size=(5,3)), index=list("ABCDE"), columns=["python","java","php"]) display(df1, df2) 1.(df1 + df2)/2 2.df1.loc["B","java"] = 0 3.df1.loc["C"] += 100 4.df1 += 10 |
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数