python之 《pandas》
pandas稍微比numpy处理数据起来还是要慢一点,pandas呢是numpy的升级版,可以说各有所长,numpy的优势是用来处理矩阵,而pandas的优势是处理数表。
1. Series 线性数表
serier一个线性数表,所谓线性数表就是他的数据比较单一,没有那么多的分类要么行为1要么列为1
通常serier我们用来自动生成数表的列啊,行啊什么的
import pandas as pd
import numpy as np
s = pd.Series([1,3,6,np.nan,44,1]) print(s)
"""
0 1.0
1 3.0
2 6.0
3 NaN
4 44.0
5 1.0
dtype: float64
""
2.DataFrame
dataframe是一个支持行索引和列索引的这么一个大型的数表
df2 = pd.DataFrame({'A' : 1.,
'B' : pd.Timestamp('20130102'),
'C' : pd.Series(1,index=list(range(4)),dtype='float32'),
'D' : np.array([3] * 4,dtype='int32'),
'E' : pd.Categorical(["test","train","test","train"]),
'F' : 'foo'})
print(df2)
"""
A B C D E F
0 1.0 2013-01-02 1.0 3 test foo
1 1.0 2013-01-02 1.0 3 train foo
2 1.0 2013-01-02 1.0 3 test foo
3 1.0 2013-01-02 1.0 3 train foo
"""
dataframe的简单操作,
df1 = pd.DataFrame(np.arange(12).reshape((3,4)))
1.查看数表的某一列的每个元素的类型
print(df2.dtypes)
2.查看所有的行
print(df2.index)
3.查看所有的列
print(df2.columns)
4.查看所有的值
print(df2.values)
5.查看所有数据的总结
print(df.describe)
6.如果想对数据的 index 进行排序并输出
print(df2.sort_index(axis=1, ascending=False))
7.如果是对数据 值 排序输出:
print(df2.sort_values(by='B'))
8.转置 T
dataframe的增删改查
1.查
查呢有四种方式可以查看,一种就是和list一般直接在list后加上[ ]引用即可,然后就是loc,iloc,ix
loc就要求引用的索引是名字,iloc是序号,而ix两者都可
shubiao = pd.DataFrame(np.arange(24).reshape((6, 4)), index=date, columns=['A', 'B', 'C', 'D'])
print(shubiao) print(shubiao[:'20160208']['A'])
# loc纯标签
print(shubiao.loc[:, 'A': 'B']) # 前后就都可以用了 前行后列
# iloc 纯数字下标
print(shubiao.iloc[0:5, 0:2]) # 由此可见的 标签来引用似乎不满足左闭右开 前行后列
# ix loc与iloc的混合版
print(shubiao.ix[0:3, 'A': 'B']) # 混合版哦 前行后列
2.改
改其实和查是一样的,只不过加上等于即可
3.删
我们要执行删除某行某列操作的时候就需要该行该列存在numpy的NaN元素,这时候我们就可以执行删除操作
# 直接去掉有 NaN 的行或列
shubiao.dropna(axis=0, how='any') # 0 - 对行操作,1 - 对列操作。any - 只要有则删除, all - 全都是则删除
# 将 NaN 的值用其他值代替, 比如代替成 0:
shubiao.fillna(value=0)
# 判断是否有缺失数据nan 为 True 表示缺失数据
shubiao.isnull() # 按照相应的位置返回true or false
# 检测在数据中是否存在 NaN, 如果存在就返回 True:
print(np.any(shubiao.isnull()) == True)
4.增
shubiao.loc['2016-02-14'] = 0 # 增加一行 如果数表之前就有初始index就一定要loc如果没有就可以iloc
shubiao['lpo'] = 0 # 增加一列 值为0
合并
concat合并
# 合并 concat
df = pd.DataFrame(np.arange(12).reshape((3, 4)), columns=['A', 'B', 'C', 'D'], index=[1, 2, 3])
df2 = pd.DataFrame(np.arange(12, 24).reshape((3, 4)), columns=['A', 'B', 'C', 'D'], index=[2, 3, 4])
# 合并第一种情况 列都相同 和并行(上下合并)
res = pd.concat([df, df2], axis=0)
print(res)
# A B C D
# 1 0 1 2 3
# 2 4 5 6 7
# 3 8 9 10 11
# 2 12 13 14 15
# 3 16 17 18 19
# 4 20 21 22 23 # 由此可以看出我们按照行合并的 但是index却并没有自动排序
# 第二种 忽略 index排序 (忽略index生成的res就会自己生成新的index)
res = pd.concat([df, df2], axis=0, ignore_index=True) # ignore_index改为Ture 即可
print(res)
# A B C D
# 0 0 1 2 3
# 1 4 5 6 7
# 2 8 9 10 11
# 3 12 13 14 15
# 4 16 17 18 19
# 5 20 21 22 23 # 第三种 但实际上很多时候我们是column是不同的,那我们要合并改怎么合并呢?
df3 = pd.DataFrame(np.arange(12, 24).reshape((3, 4)), columns=['B', 'C', 'D', 'E'], index=[2, 3, 4])
res = pd.concat([df, df3], axis=0)
print(res)
# A B C D E
# 1 0.0 1 2 3 NaN
# 2 4.0 5 6 7 NaN
# 3 8.0 9 10 11 NaN
# 2 NaN 12 13 14 15.0
# 3 NaN 16 17 18 19.0
# 4 NaN 20 21 22 23.0 但是已经爆红了但是结果还是出来了,是因为我们这样合并少了一个参数join
res = pd.concat([df, df3], axis=0, ignore_index=True, join='outer', sort=True) # join有两种参数 outer 与inner
# 这里要加上sort=True 是因为:
# FutureWarning: Sorting because non-concatenation axis is not aligned. A future version
# of pandas will change to not sort by default.
#
# To accept the future behavior, pass 'sort=False'.
#
# To retain the current behavior and silence the warning, pass 'sort=True'.
print(res)
# A B C D E
# 0 0.0 1 2 3 NaN
# 1 4.0 5 6 7 NaN
# 2 8.0 9 10 11 NaN
# 3 NaN 12 13 14 15.0
# 4 NaN 16 17 18 19.0
# 5 NaN 20 21 22 23.0 # 没有的变为nan代替 res = pd.concat([df, df3], join='inner', axis=0, ignore_index=True, sort=True)
print(res)
# B C D
# 0 1 2 3
# 1 5 6 7
# 2 9 10 11
# 3 12 13 14
# 4 16 17 18
# 5 20 21 22 把相同column 组合了 # 按照某一个df特定 index或者column 合并(也就是说这个df的column,和index 不会变 合并的那个相同的才会合并,没有的补nan)
# 若是按照index 这column不同的会叠加
# 按照df.index合并
res = pd.concat([df, df3], join_axes=[df.index], ignore_index=True, sort=True, axis=1)
print(res)
# 0 1 2 3 4 5 6 7
# 1 0 1 2 3 NaN NaN NaN NaN
# 2 4 5 6 7 12.0 13.0 14.0 15.0
# 3 8 9 10 11 16.0 17.0 18.0 19.0 # append 叠加(注叠加后本身没有变需要用一个变量来接受他)
res = df.append([df2, df3], ignore_index=True, sort=True) # df若要“扩大”就必须要sort=True
print(res) # A B C D E
# 0 0.0 1 2 3 NaN
# 1 4.0 5 6 7 NaN
# 2 8.0 9 10 11 NaN
# 3 12.0 13 14 15 NaN
# 4 16.0 17 18 19 NaN
# 5 20.0 21 22 23 NaN
# 6 NaN 12 13 14 15.0
# 7 NaN 16 17 18 19.0
# 8 NaN 20 21 22 23.0
merge合并
right = pd.DataFrame({'key': ['k0', 'k2', 'k2'],
'key1': ['K00', 'K22', 'K22'],
'A': ['A1', 'A2', 'A3'],
'B': ['B1', 'B2', 'B3']})
left = pd.DataFrame({'key': ['k1', 'k2', 'k3'],
'key1': ['K11', 'K22', 'K33'],
'C': ['C1', 'C2', 'C3'],
'D': ['D1', 'D2', 'D3']})
print(right)
'''
key key1 A B
0 k0 K00 A1 B1
1 k2 K22 A2 B2
2 k2 K22 A3 B3
'''
print(left)
'''
key key1 C D
0 k1 K11 C1 D1
1 k2 K22 C2 D2
2 k3 K33 C3 D3
'''
# 基础的合并 若参数是outer 则先排left,在排right里面多余的,若是inner则合并相同的, right就是以right的为基准没有补nan,left亦然
res = pd.merge(left, right, how='left', on='key') # how = ['left', 'right', 'outer', 'inner']
print(res)
'''
key key1_x C D key1_y A B
0 k1 K11 C1 D1 NaN NaN NaN
1 k2 K22 C2 D2 K22 A2 B2
2 k2 K22 C2 D2 K22 A3 B3
3 k3 K33 C3 D3 NaN NaN NaN
'''
res = pd.merge(left, right, how='outer', on=['key', 'key1'])
print(res)
'''
key key1 C D A B
0 k1 K11 C1 D1 NaN NaN
1 k2 K22 C2 D2 A2 B2
2 k2 K22 C2 D2 A3 B3
3 k3 K33 C3 D3 NaN NaN
4 k0 K00 NaN NaN A1 B1
'''
# 由此可见 遍历顺序是由 left来决定的
# indicator 会将合并信息放一边
# 例如
res = pd.merge(left, right, how='outer', on=['key', 'key1'], indicator=True)
print(res)
'''
key key1 C D A B _merge
0 k1 K11 C1 D1 NaN NaN left_only
1 k2 K22 C2 D2 A2 B2 both
2 k2 K22 C2 D2 A3 B3 both
3 k3 K33 C3 D3 NaN NaN left_only
4 k0 K00 NaN NaN A1 B1 right_only # only是因为没有的数据补了nan
'''
# 按照index合并 类似于pd.concat(join_axes=right.index) #依据左右资料集的index进行合并,how='outer',并打印出
right = pd.DataFrame({'key': ['k0', 'k2', 'k2'],
'key1': ['K00', 'K22', 'K22'],
'A': ['A1', 'A2', 'A3'],
'B': ['B1', 'B2', 'B3']},
index=['w', 's', 'd'])
left = pd.DataFrame({'key': ['k1', 'k2', 'k3'],
'key1': ['K11', 'K22', 'K33'],
'C': ['C1', 'C2', 'C3'],
'D': ['D1', 'D2', 'D3']},
index=['w', 'a', 'd'])
print(right)
'''
key key1 A B
w k0 K00 A1 B1
s k2 K22 A2 B2
d k2 K22 A3 B3
'''
print(left)
'''
key key1 C D
w k1 K11 C1 D1
a k2 K22 C2 D2
d k3 K33 C3 D3
'''
res = pd.merge(left, right, how='inner', left_index=True, right_index=True)
print(res)
# key_x key1_x C D key_y key1_y A B
# w k1 K11 C1 D1 k0 K00 A1 B1
# d k3 K33 C3 D3 k2 K22 A3 B3
# 解决overlapping的问题
res = pd.merge(left, right, how='inner', left_index=True, right_index=True, suffixes=['_boy', '_girl'])
print(res)
# key_boy key1_boy C D key_girl key1_girl A B
# w k1 K11 C1 D1 k0 K00 A1 B1
# d k3 K33 C3 D3 k2 K22 A3 B3
导入
import numpy as np
import pandas as pd
import xlrd
import openpyxl class_one = pd.read_excel(r'C:\Users\Book\Desktop\calss_one.xlsx')
print(class_one)
dao = int(input('学号:'))
# ---------------------------------------------------------------------------------------------------------------------
number = class_one['学号'][class_one['学号'] == dao] # 相当于我先选中了列的所有的值 然后选择了
# class_one['学号'] == 20170200334为真的一部分 返回这个值的所有属性x 是一维的series
print('--', number.index)
导出
import numpy as np
import pandas as pd
import xlrd
import openpyxl time_data = pd.date_range('20190101', periods=6) # ['2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04',
# '2019-01-05', '2019-01-06']
column_time = ['2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04','2019-01-05', '2019-01-06']
df = pd.DataFrame(np.NaN, columns=column_time)
print(df) df.to_excel(r'C:\Users\Book\Desktop\calss_one.xlsx')
这是我的一些经验
A B C D
2016-02-08 0 1 2 3
2016-02-09 4 5 6 7
2016-02-10 8 9 10 11
2016-02-11 12 13 14 15
2016-02-12 16 17 18 19
2016-02-13 20 21 22 23
1.似乎pandas的不支持列的范围查找, 只能每一行查找。
也就是说data[0] 或者data['A']是正确的,
而data[0: 3]就会查找到是第一行到第三行而不是列
data['A': 'C']就是错误的
2.貌似pandas的行选择查找不满足左闭右开
data[0:3]是第一行到第三行没错
data['2016-02-08': '2016-02-10'] 2016-02-10一行也显示了
data['2016-02-08'] 也是错误的
data[:'2016-02-08'] 才是正确的
data['2016-02-08']['A']是可以的
data['2016-02-08']['A', 'B']是错误的
也就是说每一行是有序的,但是每一列是独立的 直接所引列就是不能超过一个,直接索引行,就是不能单独一个
因为他把单个索引的给了列,把顺序索引给了行。
好了
python之 《pandas》的更多相关文章
- Python利用pandas处理Excel数据的应用
Python利用pandas处理Excel数据的应用 最近迷上了高效处理数据的pandas,其实这个是用来做数据分析的,如果你是做大数据分析和测试的,那么这个是非常的有用的!!但是其实我们平时在做 ...
- Python数据分析--Pandas知识点(三)
本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘. Python数据分析--Pandas知识点(一) Python数据分析--Pandas知识点(二) 下面将是在知识点一, ...
- 基于 Python 和 Pandas 的数据分析(4) --- 建立数据集
这一节我想对使用 Python 和 Pandas 的数据分析做一些扩展. 假设我们是亿万富翁, 我们会想要多元化地进行投资, 比如股票, 分红, 金融市场等, 那么现在我们要聚焦房地产市场, 做一些这 ...
- 基于 Python 和 Pandas 的数据分析(2) --- Pandas 基础
在这个用 Python 和 Pandas 实现数据分析的教程中, 我们将明确一些 Pandas 基础知识. 加载到 Pandas Dataframe 的数据形式可以很多, 但是通常需要能形成行和列的数 ...
- 基于 Python 和 Pandas 的数据分析(1)
基于 Python 和 Pandas 的数据分析(1) Pandas 是 Python 的一个模块(module), 我们将用 Python 完成接下来的数据分析的学习. Pandas 模块是一个高性 ...
- python安装pandas和lxml
一.安装python 二.安装pip 三.安装mysql-connector(window版):下载mysql-connector-python-2.1.3,解压后进入目录,命令安装:pip inst ...
- python之pandas用法大全
python之pandas用法大全 更新时间:2018年03月13日 15:02:28 投稿:wdc 我要评论 本文讲解了python的pandas基本用法,大家可以参考下 一.生成数据表1.首先导入 ...
- python之pandas简单介绍及使用(一)
python之pandas简单介绍及使用(一) 一. Pandas简介1.Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据 ...
- Python数据分析--Pandas知识点(二)
本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘. Python数据分析--Pandas知识点(一) 下面将是在知识点一的基础上继续总结. 13. 简单计算 新建一个数据表 ...
- Python之Pandas中Series、DataFrame
Python之Pandas中Series.DataFrame实践 1. pandas的数据结构Series 1.1 Series是一种类似于一维数组的对象,它由一组数据(各种NumPy数据类型)以及一 ...
随机推荐
- TiOps,支持容器,支持多云安全远程运维,疫情期间免费开放,助力远程办公
TiOps,支持多云环境安全远程运维,疫情期间免费对外开放在疫情期间,为减少疾病传染可能性,许多公司的选择了在家远程办公.对于运维来说,既要远程运维,又要保证安全,还要在复杂的IT环境中保持高效,面临 ...
- 阿里百秀后台管理项目笔记 ---- Day01
摘要 在此记录一下阿里百秀项目的教学视频的学习笔记,部分页面被我修改了,某些页面效果会不一样,基本操作是一致的,好记性不如烂笔头,加油叭!!! step 1 : 整合全部静态页面 将静态页面全部拷贝到 ...
- day46 Pyhton 数据库Mysql 03
一内容回顾 存储引擎:主要描述的是数据存储的不同方式 innodb 支持事务\支持外键\行级锁\聚焦索引 myisam 不支持事务\不支持外键\表级锁\非聚焦索引 memory 只能在内存中存储表数据 ...
- C语言-入门级编程语言--编程小白首选
我们都知道计算机很厉害,利用计算机可以高效地处理和加工信息,随着计算机技术的发展,计算机的功能越来越强大,不但能够处理数值信息,而且还能处理各种文字.图形.图像.动画.声音等非数值信息. 在199 ...
- 第二十二章 Nginx性能优化
一.性能优化概述 1.我们需要了解 1.首先需要了解我们当前系统的结构和瓶颈,了解当前使用的是什么,运行的是什么业务,都有哪些服务,了解每个服务最大能支撑多少并发.比如nginx作为静态资源服务并发是 ...
- 【API管理 APIM】如何查看APIM中的Request与Response详细信息,如Header,Body中的参数内容
问题描述 通过APIM门户或者是Developer门户,我们可以通过Test功能测试某一个接口,通过Trace可以获取非常详细的Request,Response的信息,包含Header,X-Forwa ...
- GO用内置包写爬虫
一.要点 爬虫被想太多,把他当做一个模拟别人的请求响应即可了,所有呢go写爬虫关键是写请求 二.get请求 package main import ( "bytes" " ...
- Java jvm 类加载 反射
Java 底层 jvm,类加载,反射 Java语言是跨平台语言,一段java代码,经过编译成class文件后,能够在不同系统的服务器上运行:因为java语言中有虚拟机jvm,才有了跨平台,java为了 ...
- sentinel控制台的使用
一,下载sentinel控制台:sentinel-dashboard-1.7.0.jar , 注 1.7.1版本控制台与最新的sentinel有冲突,会报invalid type错误 二,启动sent ...
- 线程池SingleThreadPool
只有一个核心线程,当被占用时,其他的任务需要进入队列等待 public class MainActivity extends AppCompatActivity { @Override protect ...