import numpy as np    #用于计算
import pandas as pd   #用于数据处理

1、定义数组

(1) 一维数组

data1=pd.Series([1,2,3])
print(data1)
#使用python中的range( , )
data1=pd.Series(range(1,10))
print(data1)
#使用numpy
array1=np.array([1,2,3])
data1=pd.Series(array1)   # numpy数组转pandas数组
data2=pd.Series(np.arange(1,11))
print(data1)
print(data2)
#延伸知识:生成时间学列
#freq:要生成的日期的频次,频次是指两个相邻日期间隔时间,可以是5小时:“5H",1天: "D",3个月:"3M"
date_list=pd.date_range(start='20200325',periods=7, freq="7D")   #开始时间、周期、频率
date_list2=pd.date_range(end='20200325',periods=7, freq="7D")   #开始时间、周期、频率  往前推
print (date_list)
print (date_list2)

(2) 二维数组

# 直接定义
data2=pd.DataFrame([[1,2,3],[4,5,6]
])
# 使用numpy
data2=pd.DataFrame(np.arange(0,6))
data2=pd.DataFrame(np.arange(0,6).reshape((2,3)))
print(data2)

2、自定义索引

(1) 一维数组,index

# 直接给出
data1=pd.Series(range(1,4),index=['a','b','c'])
data1=pd.Series(range(1,4),index=[chr(i) for i in range(97,123)])  #索引为26个小写字母  65-91为大写字母
# 使用python中的range()
data1=pd.Series(['张三','李四','王五'],index=range(1,4))   #元素个数与索引数必须相同
# 使用numpy
data1=pd.Series(['张三','李四','王五'],index=np.arange(1,4))  #索引为numpy数组,必须是一维
print(data1)

(2) 二维数组,行:index= , 列:colums

data2=pd.DataFrame([['张三','张阿姨','张叔叔'],['李四','李阿姨','李叔叔'],['王五','王阿姨','王叔叔']],index=range(1,4),columns=['学生','学生母亲','学生父亲'])
print(data2)
#案例
month_list=pd.date_range(end='20200326',periods=7,freq="M")
data2=pd.DataFrame([[1.5,7],[1.5,7.5],[1.5, 8],[2, 8.5],[2, 9],[2, 10],[2.5, 11]],index=month_list,columns=["每个月食小鱼干的重量(kg)","橘猫体重(kg)"])
print(data2)

3、选择数据

(1) 一维数组

data1=pd.Series(range(1,11),index=[chr(i) for i in range(97,107)])
print(data1)
# 选择index值
value1=data1["b"]
# 选择第几个
value2=data1[2]
# 从第2个到第6个
value3=data1[1:6]
# 从index='c'到index='f'对应的值
value5=data1['c':'f']
# 从第2个即从"b"到index='e'对应的值
value6=data1[data1.index[1]:"e"]
print(value6)

(2) 二维数组

data2=pd.DataFrame(np.arange(1,13).reshape((3,4)),index=[chr(i) for i in range(97,100)],columns=[chr(i) for i in range(65,69)])
print(data2)
# 选择索引的值,用loc
# 选择第几个,用iloc
value7=data2.loc['a',:]  #索引为‘a’所在的行
value8=data2.iloc[1,:]  # 第二行
value9=data2.loc['b','B']  # 取出b行B列的值
value10=data2.loc[data2.index[2],'C']  # 取出第二行C列的值
print(value8)
#选择第b行到第3行,第0列到第B列之间的值
value11=data2.loc["b":data2.index[2], data2.columns[0]:"B"]
print(value11)

4、赋值

(1) 直接赋值,原数组会改变

data1=pd.Series(range(1,11),index=[chr(i) for i in range(97,107)])
data2=pd.DataFrame(np.arange(1,21).reshape((5,4)),index=[chr(i) for i in range(97,102)],columns=[chr(i) for i in range(65,69)])
# 和numpy的方法一样 会改变原来的数组
data1[3]=100
# 直接写index
data1["d"]=100
data2.loc["C","D"]=np.nan  # 将C行D列赋值为nan

(2) 条件赋值

# 与numpy相同的情况
data2[data2.isnull()]=300  #将data2中为空的元素赋值为300
#把B列所有大于9的赋值为100
data2.loc[:,"B"][data2.loc[:,"B"]>9]=100

5、合并

data1=pd.DataFrame(np.arange(1,13).reshape((3,4)),index=[chr(i) for i in range(97,100)],columns=[chr(i) for i in range(65,69)])

(1)添加一列或一行

# 只能给一个数,或一个长度和行数相同的列表或一维数组
# 如果给的是一个数,则添加的这一列所有元素都是这个数
# (numpy中并没有此功能)
data1["E"]=np.arange(0,3)  # E列不存在,添加E这列
data1["D"]=np.arange(0,3)  # D列存在,相当于赋值
data1.loc["d",:]=np.arange(0,4)  # d行不存在,添加
data1.loc[:,"E"]=[11,22,33]   #E列不存在,添加E这列
data1.loc[:,"E"]=11   #E列不存在,添加E这列

(2)concat

data1=pd.DataFrame(np.arange(1,13).reshape((3,4)),index=[chr(i) for i in range(97,100)],columns=[chr(i) for i in range(65,69)])
data2=pd.DataFrame(np.arange(13,19).reshape((2,3)),index=[chr(i) for i in range(97,101)],columns=[chr(i) for i in range(65,69)])
# 和numpy的区别:对于行数/列数是否相等没有要求!!!空的地方用NaN表示
# 和numpy的区别:两个数组的维度数不一定要相同!!!
# 默认axis=0
# 默认join="outer",两个数组叠加,空的地方用NaN;join="inner",只挑2个数组共有的元素
# 默认ignore_index=Flase,当它等于True时,index将默认从0开始排
# 但是没有ignore_columns这种写法!!!
data3=pd.concat((data1,data2),axis=0,join="inner",ignore_index=False )
print(data3)

(3)append

# 和numpy的写法不同, 和列表的写法相同
# 对数组的维度没有要求,数组的列数也没有要求
# 只能竖直添加
data3=data1.append(data2)  # 相当于data3=pd.concat((data1,data2))
print(data3)

(4)merge

# 把两个数组中相同的值得那几行找出来
# on=两个数组中相同的列名,必要条件:2个数组至少有一个相同的列名
# how=默认认为inner,可设为inner/outer/left/right
data3=pd.merge(data1,data2,on="C")
print(data3)
# left_on=第一个数组要选的列名,right_on=第二个数组要选的列名
data3=pd.merge(data1, data2, Left_on="B",right_on="C")
print(data3)
# left_index  将第一个数组的行索引用作连接键
# right_index 将第二个行索引用作连接键
# 注意:这两个必须同时为true
data3=pd.merge(data1,data2,left_index=True,right_index=True,how="outer")
print(data3)

6、使用pandas读取csv文件

file_path="E:\MySpace\numpy基础知识\work.csv"
data=pd.read_csv(file_path)
score=pd.loc[:,"评分"]  # 读取评分这一列
print(data)

7、将数据保存到csv文件

data=pd.DataFrame(np.arange(0,100).reshape((50,2)),columns=["第一列","第二列"])
data.to_csv(file_path,index=0)   # 不写入索引号

8.pandas的基本操作

(1)求最大值、最小值、科严重值、中位数

# max, min, sum, mean, median
# 注意和numpy的区别
# np里A.sum()是对整个数组求和,而pd里,df.sum()是对所有列分别求和!!!
# A[0].sum()默认是求水平方向第行,df[e].sum()默认是求竖直方向第列
A=np.arange(0,12).reshape((3,4))
A_sum=A.sum()   # 对所有元素求和
A_sum2=A[:,0].sum()   # 对第0列求和
print(A)
print(A_sum)df=pd.DataFrame(np.arange(0,12).reshape((3,4)))
print(df)
df_sum=df.sum()  # 对每一列分别求和
df_sum=df[0].sum()  # 对第0列求和
df_sum2=df.iloc[0,:].sum()  # 对第0行求和
print(df_sum)

(2) describle 一次性计算最大值、最小值、科严重值、中位数

data_describle=data.describe()  # 默认计算纯数字的列
print(data_describle)

(3) 根据索引排序,ascending升序,没有列索引排序

data2=data.sort_index(axis=0,ascending=False)
print(data2)

(4) 根据值排序

data3=data.sort_values(by="评分",ascending=False)
data4=data.loc["作者","评分"].sort_values(by="评分",ascending=False)  # 只显示作者、评分两列的排序结果

9.drop函数和fillna函数(数据清洗常用函数)

df=pd.DataFrame(np.arange(0,100).reshape((25,4)),index=[chr(i) for i in range(97, 122)],columns=[chr(i) for i in range(65, 69)])
df.iloc[(1,3)]=np.nan
df.iloc[(5,2)]=np.nan
df.iloc[(14,2)]=np.nan
df.iloc[(21,0)]=np.nan
df.iloc[(21,1)]=np.nan
df.iloc[(21,2)]=np.nan
print(df)

(1)dropna, 清理无效数据(并不会在原来的数组上删除,需要给他重新命名)

# dropna默认how="any",axis=0 (pd里axis=0居然是删除行!!!),将含有NaN的行删除
# 当how="all"时,只有哪一行里面的元素都是NaN,才将这一行删除
# thresh=3当这一行中有3个以上的NaN时,才将这一行删除
data2=df.dropna()
data2=df.dropna(how="all")
print(data2)

(2)drop按条件删除行(列)

data3=df.drop(["a"])  #如果不写axis,默认删除行
data3=df.drop(["A"],axis=1)  #pandas中axis=1表示列,而numpy中axis=0表示列
print(data3)
# 如果A列中含有的元素小于2或者大于80,则删除此行
data3=df.drop(df[(df["A"]<2) | (df["A"]>80)].index)
print(data3)

(3)fillna函数

# 所有NaN处修改为0
data3=df.fillna(0)
print(data3)
# 第A列的NaN修改为100,B列的NaN修改为200,C列的NaN修改为300,D列的NaN修改为400
data3=df.fillna({"A":100,"B": 200,"C": 300,"D": 400
})
print(data3)
# 用这一列的前一个/后一个非NaN的值填充NaN. ffill/bfill
data3=df.fillna(method="bfill")
print(data3)

Python之模块pandas基础知识相关推荐

  1. 数字图像处理与Python实现笔记之基础知识

    数字图像处理与Python实现笔记之基础知识 摘要 绪论 1 数字图像处理基础知识 1.1 数字图像简介 1.1.1 数字图像处理的目的 1.1.2 数字图像处理的应用 1.1.3 数字图像处理的特点 ...

  2. VII python(1)基础知识

    VII Python(1)基础知识 1989年诞生(同LinuxOS),google推崇,06年后才开始在中国流行,08年运维开始使用python www.python.org(主流OS默认配的pyt ...

  3. python 图像分析自然纹理方向与粗细代码_数字图像处理与Python实现笔记之基础知识...

    数字图像处理与Python实现笔记之基础知识 摘要 绪论 1 数字图像处理基础知识 1.1 数字图像简介 1.1.1 数字图像处理的目的 1.1.2 数字图像处理的应用 1.1.3 数字图像处理的特点 ...

  4. 学python需要什么基础知识-没学过Python先要学习哪些基础知识?

    零基础学Python应该学习哪些入门知识 关于零基础怎么样能快速学好Python的问题,百度提问和解答的都很多,你可以百度下看看.我觉得从个人自学的角度出发,应从以下几个方面来理解: 1 为什么选择学 ...

  5. python语言入门w-python基础知识(一)

    最近花时间整理了一下以前学过的python基础知识,语言最多的是使用. 1.1 开发模式 交互模式:简单的调试或者测试 开发流程 创建以.py结尾的python文件 在python文件中输入打印&qu ...

  6. Python菜鸟入门:day01基础知识

    写在前面: 此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 传送门: day01基础知识 day02知识分类 day03 ...

  7. Python数据分析与可视化(基础知识)

    Python基础 本文首先介绍一下做数据分析与可视化所必备的Python基础,涉及Python的组合数据类型.控制流以及常用的内置函数. 数据类型 我们将讨论数据处理常见的数据类型. Python中的 ...

  8. Python数据分析与可视化(基础知识)Python基础

    Python基础 本文首先介绍一下做数据分析与可视化所必备的Python基础,涉及Python的组合数据类型.控制流以及常用的内置函数. 数据类型 我们将讨论数据处理常见的数据类型. Python中的 ...

  9. python数学知识点_python基础知识整理

    序言:本文简单介绍python基础知识的一些重要知识点,用于总结复习,每个知识点的具体用法会在后面的博客中一一补充 2. 程序: 一组计算机能识别和执行的指令,是实现某种需求的软件. 3. 操作系统: ...

  10. Python机器学习引言与基础知识储备

    第一部分 机器学习入门 机器学习入门 第一部分 机器学习入门 1.1 为什么选择机器学习 1.1.1 机器学习能够解决的问题 1.1.2 熟悉任务和数据 1.2 为什么选择Python 1.3 sci ...

最新文章

  1. mysql特有语法_mysql 有用的特殊语法
  2. 哈·曼丁的故事(三)
  3. BZOJ4825: [Hnoi2017]单旋(Splay)
  4. 程序员面试必备的20条Python经典面试题
  5. PyTorch | 通过torch.normal()创建概率分布的张量 | torch.normal()如何使用?torch.normal()使用方法 | torch.normal()例子
  6. div自定义下拉框组件
  7. 连接数mysql证登录名和密码_mysql连接数
  8. 在线阅读各版本android系统源代码
  9. bzoj4033 [HAOI2015]树上染色(树形)
  10. Android App 免杀教程
  11. java retainall_Java ArrayList retainAll() 使用方法及示例
  12. java 命令行工具_分享java自带命令行工具jmap、jhat与jinfo的方法详解
  13. 面试记录-KPMG(毕马威)
  14. Oracle Database 12c新特性 In-Database Archiving数据库内归档
  15. 电脑截屏有哪些常用的快捷键
  16. 虚拟与现实!深兰科技打造湖北首个街区数字主理人「江妮」
  17. 国网通信之数据通信网
  18. 跨域(什么样的请求方式才叫跨域请求?)
  19. 破解打开证书加密的PDF文档-数字证书(电子书私钥)下载和导入教程
  20. [51nod1355]斐波那契的最小公倍数

热门文章

  1. 5G核心网技术基础自学系列 | 与EPC互通
  2. 关于视频号主页实现一键添加个人微信功能的思路
  3. matlab计算卸载_安装与卸载MATLAB的一点经验
  4. php7没有pecl,PHP7 pecl 安装 mongodb扩展 和 PHPLIB
  5. vue-ES2015:
  6. 算法学习:501.二叉搜索树中的众数
  7. EventRecorder 使用注意事项
  8. 2014联通见习感悟
  9. 决策表(决策树)[软件工程]
  10. html实现银行卡号输入,Vue中Element-ui 输入银行账号每四位加一个空格的实现代码_飛雲_前端开发者...