pandas库简单入门
注:关于pandas的相关问题,若本文未涉及可在下方留言告诉我,我会在文章中进行补充的
Ctrl
+F
可进行全文查找
原文链接:https://mtyjkh.blog.csdn.net/article/details/84752080,欢迎转载
文章目录
- 0 安装
- 1 文件
- 1.1 文件读写模式
- 1.2 读取CSV文件
- 1.3 读取excel文件
- 1.4 读取txt文件
- 1.5 读取JSON文件
- 1.6 写入CSV文件
- 1.7 写入JSON文件
- 2 DataFrame
- 2.1 获取列名
- 2.2 遍历
- 2.3 合并(concat方法)
- 2.4 将df按照某个字段进行拆分求和(groupby()函数)
- 3 行列
- 3.1 查找
- 3.1.1 loc(按行\列标签进行查找)
- 3.1.2 iloc(按行\列号进行查找)
- 3.1.3 查找含有特定值的行
- 3.2 删除
- 3.2.1删除特定数值的行
- 3.3 修改
- 3.4 排序
- 3.5 转置(行列转换)
- 4 索引
- 4.1 更新
- 4.2 设置
- 4.3 重置
- 5 重复项
- 5.1 查看是否存在重复项
- 5.2 删除
- 6 元素
- 6.1 查找
- 6.2 修改
- 7 处理缺损数据
- 7.1 dropna()方法
- 8 实现数据分组求平均值
0 安装
pip方式
pip install pandas
Anaconda
conda install pandas
1 文件
1.1 文件读写模式
以CSV文件的读取为例,代码如下
import pandas as pd
#设置只读模式
file_path = os.path.join("test.csv")
data = pd.read_csv(open(file_path,'r',encoding='utf-8'),sep='|')
mode | 描述 |
---|---|
“r” |
打开,只读。文件的指针将会放在文件的开头。这是默认模式 ;
|
“w” |
打开,只写。如果该文件已存在则将其覆盖 。如果该文件不存在,创建新文件;
|
“a” |
打开,指向文件尾,在已存在文件中追加 ;
|
“rb” | 打开一个二进制文件,只读; |
“wb” |
打开一个二进制文件,只写。如果该文件已存在则将其覆盖 。如果该文件不存在,创建新文件;
|
“ab” |
打开一个二进制文件,进行追加 ;
|
“r+” | 以读/写方式打开一个已存在的文件; |
“w+” |
以读/写方式建立一个新的文本文件。如果该文件已存在则将其覆盖 。如果该文件不存在,创建新文件 ;
|
“a+” |
以读/写方式打开一个文件文件进行追加 ;
|
“rb+” | 以读/写方式打开一个二进制文件; |
“wb+” |
以读/写方式建立一个新的二进制文件。如果该文件已存在则将其覆盖 。如果该文件不存在,创建新文件
|
“ab+” |
以读/写方式打开一个二进制文件进行追加 ;
|
1.2 读取CSV文件
import pandas as pd
import os
file_path = os.path.join("test.csv")
#读取test.csv文件中的A、B列,若不设置usecols参数,默认读取全部数据。
data = pd.read_csv(open(file_path,'r',encoding='utf-8'),sep='|',usecols=["A","B"])
1.3 读取excel文件
excel文件的读取都可以用以下函数来实现
pd.read_excel(io, sheetname=0,header=0,skiprows=None,index_col=None,names=None,arse_cols=None,date_parser=None,na_values=None,thousands=None, convert_float=True,has_index_names=None,converters=None,dtype=None,true_values=None,false_values=None,engine=None,squeeze=False,**kwds)
参数详解:
io
:excel文件路径;sheetname
:默认是sheetname为0,返回多表使用sheetname=[0,1],若sheetname=None是返回全表 。注意:int/string返回的是dataframe,而none和list返回的是dict of dataframe。header
:指定作为列名的行,默认0,即取第一行,数据为列名行以下的数据;若数据不含列名,则设定 header = None;skiprows
:省略指定行数的数据,比如省略第三行,skiprows=2
;skip_footer
:省略从尾部数的行数据index_col
:指定列为索引列;names
:指定列的名字,传入一个list数据
1.4 读取txt文件
这里使用read_table()
函数。
import pandas as pd
data=pd.read_table('../data/datingTestSet2.txt',sep='\t',header=None)
data.head()
"""
输出:
0 1 2 3
0 40920 8.326976 0.953952 3
1 14488 7.153469 1.673904 2
2 26052 1.441871 0.805124 1
3 75136 13.147394 0.428964 1
4 38344 1.669788 0.134296 1
"""
函数原型:
pandas.read_table(filepath_or_buffer,sep='\t',delimiter=None,header='infer',names=None,index_col=None,usecols=None,squeeze=False,prefix=None,mangle_dupe_cols=True,dtype=None,engine=None,converters=None,true_values=None,false_values=None,skipinitialspace=False,skiprows=None,nrows=None,na_values=None,keep_default_na=True,na_filter=True,verbose=False,skip_blank_lines=True,parse_dates=False,infer_datetime_format=False,keep_date_col=False,date_parser=None,dayfirst=False,iterator=False,chunksize=None,compression='infer',thousands=None,decimal=b'.',lineterminator=None,quotechar='"',quoting=0,escapechar=None,comment=None,encoding=None,dialect=None,tupleize_cols=None,error_bad_lines=True,warn_bad_lines=True,skipfooter=0,doublequote=True,delim_whitespace=False,low_memory=True,memory_map=False,float_precision=None)
常用参数简介:
filepath_or_buffer
:文件路径。sep
:分隔符,默认为\t。header
:用作列名的行号,默认为0(第一行),如果没有header行就应该设置为None。names
:用于结果的列名列表,结合header=None。skiprows
:跳过指定行。na_values
:缺失值处理,na_values= ["null"]
,用null字符替换缺失值。nrows
:定需要读取的行数:nrows = 100
, 指定读取前100行数据。
1.5 读取JSON文件
import pandas as pddf = pd.read_json('frame.json')
1.6 写入CSV文件
#任意的多组列表
a = [1,2,3]
b = [4,5,6]
#字典中的key值即为csv中的列名
data_dict = {'a_name':a,'b_name':b}#设置DataFrame中列的排列顺序
#如果无需重命名,columns这一参数可以省略
dataFrame = pd.DataFrame(data_dict, columns=['a_name', 'b_name'])#将DataFrame存储到csv文件中,index表示是否显示行名,default=True
dataFrame.to_csv("test.csv", index=False, sep='|')
#如果希望在不覆盖原文件内容的情况下将信息写入文件,可以加上mode="a"
dataFrame.to_csv("test.csv", mode="a", index=False,sep='|')
1.7 写入JSON文件
import pandas as pd
import numpy as npdf = pd.DataFrame(np.arange(16).reshape(4, 4),index=['onw', 'two', 'three', 'four'],columns=['A', 'B', 'C', 'D'])
df.to_json('df.json')
2 DataFrame
2.1 获取列名
DataFrame.columns.values.tolist()
2.2 遍历
遍历DataFrame数据。
for index, row in df.iterrows():print(row["column"])
2.3 合并(concat方法)
谈到DataFrame数据的合并,一般用到的方法有concat、join、merge。
这里就介绍concat方法,以下是函数原型。
pd.concat(objs, axis=0, join=‘outer’, join_axes=None, ignore_index=False,
keys=None, levels=None, names=None, verify_integrity=False)
参数说明 :
objs: series,dataFrame或者是panel构成的序列list。
axis: 需要合并链接的轴,0是行,1是列。
join: 连接的方式 inner,或者outer。
2.3.1 相同字段的表首尾相接
# 现将表构成list,然后在作为concat的输入
frames = [df1, df2, df3]
result = pd.concat(frames)
#重置索引(index),不然后面容易出问题,我曾经因为这个找了一个上午的bug。
df = result.reset_index(drop=True)
2.3.2 横向表拼接(行对齐)
特别注意: axis=1时,concat()
的拼接是根据df.index来的,index相同的的行进行拼接。
2.3.2.1 axis参数说明
当axis = 1的时候,concat就是行对齐,然后将不同列名称的两张表合并。
result = pd.concat([df1, df4], axis=1)
2.3.2.2 join参数说明
加上join参数的属性,如果为inner
得到的是两表的交集,如果是outer
,得到的是两表的并集。
result = pd.concat([df1, df4], axis=1, join='inner')
2.3.2.3 join_axes参数说明
如果有join_axes的参数传入,可以指定根据那个轴来对齐数据
例如根据df1表对齐数据,就会保留指定的df1表的轴,然后将df4的表与之拼接
result = pd.concat([df1, df4], axis=1, join_axes=[df1.index])
2.4 将df按照某个字段进行拆分求和(groupby()函数)
如果我们需要将Datetime值相同的行进行合并(AEP_MW取这些行的和),可以这样做
dataset_new_2 = dataset_new.groupby(by='Datetime')['AEP_MW'].sum()# 此时得到的dataset_new_2数据类型为Series,可以通过下面代码转化为DataFrame
dict_dataset = {'Datetime':dataset_new_2.index,'AEP_MW':dataset_new_2.values}
dataset_new_3 = pd.DataFrame(dict_dataset)
dataset_new_3.head()
2004/10/1的AEP_MW为所有值的和
3 行列
3.1 查找
查找DataFrame数据类型中的某一(多)行(列)
这里记录三个可以实现该功能的函数:loc
、iloc
、ix
。
- loc:通过标签选取数据,即通过index和columns的值进行选取。loc方法有两个参数,按顺序控制行列选取。
- iloc:通过行号选取数据,即通过数据所在的自然行列数为选取数据。iloc方法也有两个参数,按顺序控制行列选取。
- ix:混合索引,同时通过标签和行号选取数据。ix方法也有两个参数,按顺序控制行列选取。
代码示例如下:
#df数据a b c
d 0 1 2
e 3 4 5
f 6 7 8
g 9 10 11
3.1.1 loc(按行\列标签进行查找)
通过标签选取数据,即通过index和columns的值进行选取。loc方法有两个参数,按顺序控制行列选取。
#1.定位单行
df.loc['e'] #df数据参考上文
'''
a 3
b 4
c 5
Name: e, dtype: int32
===================================
'''
#2.定位单列
df.loc[:,'a']
'''
d 0
e 3
f 6
g 9
Name: a, dtype: int32
===================================
'''
#3.定位多行
#方法一:
df.loc['e':]
'''a b c
e 3 4 5
f 6 7 8
g 9 10 11
===================================
'''
#方法二
df.loc[['e','f','g']]
'''a b c
e 3 4 5
f 6 7 8
g 9 10 11
===================================
'''
#4.定位多行多列
#方法一:
df.loc['e':,:'b']
'''a b
e 3 4
f 6 7
g 9 10
===================================
'''
#方法二:
df.loc['e':,['a','b']]
'''a b
e 3 4
f 6 7
g 9 10
===================================
'''
3.1.2 iloc(按行\列号进行查找)
通过行号选取数据,即通过数据所在的自然行列数为选取数据。iloc方法也有两个参数,按顺序控制行列选取。
#1.定位单行
df.iloc[1] #df数据参考上文
'''
a 3
b 4
c 5
Name: e, dtype: int32
===================================
'''
#2.定位单列
df.iloc[:,1]
'''
d 1
e 4
f 7
g 10
Name: b, dtype: int32
===================================
'''
#3.定位多行
df.iloc[1:3] #或者df.iloc[[1,2,3]]
'''a b c
e 3 4 5
f 6 7 8
===================================
'''
#4.定义多行多列
df.iloc[1:3,1:2]#或者df.iloc[1:3,[1,2]]
'''b
e 4
f 7
===================================
'''
3.1.3 查找含有特定值的行
import pandas as pd
import numpy as npa=np.array([[1,2,3],[4,5,6],[7,8,9]])
df=pd.DataFrame(a,index=['row0','row1','row2'],columns=list('ABC'))
print(df)#选取A为4的行
df=df[df['A'].isin([4])]print(df)
"""
输出A B C
row0 1 2 3
row1 4 5 6
row2 7 8 9A B C
row1 4 5 6
"""
3.2 删除
删除DataFrame中某一行
df.drop([16,17])
3.2.1删除特定数值的行
import pandas as pd
import numpy as npa=np.array([[1,2,3],[4,5,6],[7,8,9]])
df=pd.DataFrame(a,index=['row0','row1','row2'],columns=list('ABC'))
print(df)#通过~取反,选取不包含数字4的行
df=df[~df['A'].isin([4])]print(df)
"""
输出A B C
row0 1 2 3
row1 4 5 6
row2 7 8 9A B C
row0 1 2 3
row2 7 8 9
"""
3.3 修改
3.3.1 修改列名
df.columns = ['A','B','C']
3.4 排序
df.sort_values(by="sales" , ascending=False)
函数原型:
DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind=‘quicksort’, na_position=‘last’)
列举常用的参数用法:
- by:函数的操作对象是DataFrame
- axis:进行操作的列名,多个列名用列表表示
- ascending:默认为升序True
#dataFrame:
'''col1 col2 col3
0 A 2 0
1 A 1 1
2 B 9 9
3 NaN 8 4
4 D 7 2
5 C 4 3
'''
df = df.sort_values(by=['col1'])
'''
输出:col1 col2 col3
0 A 2 0
1 A 1 1
2 B 9 9
5 C 4 3
4 D 7 2
3 NaN 8 4
'''
3.5 转置(行列转换)
将dataFrame原先的行变成列,将原先的列变为行
df = df.T
4 索引
reindex()
更新index或者columns,
默认:更新index,返回一个新的DataFrameset_index()
将DataFrame中的列columns设置成索引index
打造层次化索引的方法reset_index()
将使用set_index()打造的层次化逆向操作
既是取消层次化索引,将索引变回列,并补上最常规的数字索引
详细讲解:
4.1 更新
reindex():更新index或者columns。
默认:更新index,返回一个新的DataFrame。
# 返回一个新的DataFrame,更新index,原来的index会被替代消失
# 如果dataframe中某个索引值不存在,会自动补上NaN
df2 = df1.reindex(['a','b','c','d','e'])# fill_valuse为原先不存在的索引补上默认值,不再是NaN
df2 = df1.reindex(['a','b','c','d','e'], fill_value=0)# inplace=Ture,在DataFrame上修改数据,而不是返回一个新的DataFrame
df1.reindex(['a','b','c','d','e'], inplace=Ture)# reindex不仅可以修改 索引(行),也可以修改列
states = ["columns_a","columns_b","columns_c"]
df2 = df1.reindex( columns=states )
4.2 设置
set_index():将DataFrame中的列columns设置成索引index。
打造层次化索引的方法。
# 将columns中的其中两列:race和sex的值设置索引,race为一级,sex为二级
# inplace=True 在原数据集上修改的
adult.set_index(['race','sex'], inplace = True) # 默认情况下,设置成索引的列会从DataFrame中移除
# drop=False将其保留下来
adult.set_index(['race','sex'], drop=False)
4.3 重置
reset_index():将使用set_index()打造的层次化逆向操作。
既是取消层次化索引,将索引变回列,并补上最常规的数字索引。
df.reset_index()
5 重复项
5.1 查看是否存在重复项
DataFrame的duplicated方法返回一个布尔型Series,表示各行是否重复行。
a = df.duplicated()
5.2 删除
而 drop_duplicates方法,它用于返回一个移除了重复行的DataFrame
#去掉A_ID和B_ID重复的行,并保留第一次出现的行
df = df.drop_duplicates(subset=['A_ID', 'B_ID'], keep='first')
- 当keep=False时,就是去掉所有的重复行
- 当keep='first’时,就是保留第一次出现的重复行
- 当keep='last’时就是保留最后一次出现的重复行。
6 元素
6.1 查找
通过标签或行号获取某个数值的具体位置(DataFrame数据类型中)
#DataFrame数据a b c
d 0 1 2
e 3 4 5
f 6 7 8
g 9 10 11
#获取第2行,第3列位置的数据
df.iat[1,2]
Out[205]: 5#获取f行,a列位置的数据
df.at['f','a']
Out[206]: 6
'''
iat:依据行号定位
at:依旧标签定位
'''
6.2 修改
修改DataFrame中的某一元素
df['列名'][行序号(index)] = "新数据"
7 处理缺损数据
7.1 dropna()方法
该方法用于检查是否存在缺损数据,若存在则删除相关列与行。
函数原型:
pd.dropna(axis=0, how=‘any’, thresh=None, subset=None, inplace=False)
参数说明:
axis
: 该参数确定是删除包含缺失值的行或列,axis=0
或axis='index’
删除含有缺失值的行,axis=1
或axis='columns’
删除含有缺失值的列。how
:any
存在即nan即丢弃,all
全部为nan才丢弃。thresh
:默认值 None值,thresh=n
则表明每行至少n的非NaN值,否则则删除该行。subset
:定义要在哪些列中查找缺失值。inplace
:默认值 False,是否直接在原DataFrame进行修改。
8 实现数据分组求平均值
#求type1Name下属所有类别名
type1Name = df.type1Name.unique()#输出每个类别A值的平均值
for type1 in type1Name:t = df.type1Name.A == type1print(df[t].mean())
pandas库简单入门相关推荐
- Pandas库——DataFrame入门
文章目录 一.简介 二.创建 1.python字典型 2.嵌套list/numpy的多维数组 3.文件读取 三.操作 1.索引的赋值 2.查看 3.添加 4.修改 5.删除 一.简介 DataFram ...
- python3-matplotlib库简单入门
作者: 明天依旧可好 QQ交流群: 807041986 最新更新时间: 2020-12-10 注:关于matplotlib库的相关问题,若本文未涉及可在下方留言告诉我,我会在文章中进行补充的 原文链接 ...
- python如何安装panda数据库_在Pycharm中安装Pandas库方法(简单易懂)
开发环境的搭建是一件入门比较头疼的事情,在上期的文稿基础上,增加一项Anaconda的安装介绍.Anaconda是Python的一个发行版本,安装好了Anaconda就相当于安装好了Python,并且 ...
- Python Pandas库 最快入门教程(最简单最详细)
文章目录 1.导入Pandas库 2.创建Series对象 3.获取Series中的所有索引和值 4.判断Series是否包含某一个索引 5.对齐两个Series 6.为Series及其索引列命名 7 ...
- Python数据分析~Pandas库30分钟快速入门
目录 1 Pandas序列和数据表 2 Pandas数据聚合与分组运算 3 Pandas数据可视化 Pandas库在数据分析中是非常重要和常用的库,它利用数据框让数据的处理和操作变的简单和快捷.在数 ...
- 【python教程入门学习】Pandas库下载和安装
Python 官方标准发行版并没有自带 Pandas 库,因此需要另行安装.除了标准发行版外,还有一些第三方机构发布的 Python 免费发行版, 它们在官方版本的基础上开发而来,并有针对性的提前安装 ...
- Pandas库DataFrame的简单应用2
Pandas练习2 练习题 DataFrame的简单应用 练习1 代码 效果图 练习2 代码 效果图 小结 练习题 DataFrame的简单应用 练习1 代码 import pandas as pd# ...
- 第三周 数据分析之概要 Pandas库入门
Pandas库介绍: Pandas库引用:Pandas是Python第三方库,提供高性能易用数据类型和分析工具 import pandas as pd Pandas基于NumPy实现,常与NumPy和 ...
- Pandas库入门详细教程
Pandas库的介绍 1.Pandas是Python第三方库,提供高性能易用数据类型和分析工具. 2.Pandas基于NumPy实现,常与NumPy和Matplotlib一同使用. 3.Pandas库 ...
最新文章
- Android apk动态加载机制的研究
- linux与安卓系统目录,android系统架构及源码目录结构
- redhat enterprise 5 在 VMware 6.5 中中文显示乱码的解决办法
- CRM Extension field render and property handling
- 金坛区实验幼儿园服务器不稳定,2019年金坛城区部分公办幼儿园服务区划分方案(试行)...
- poj2456 二分搜索 挑战程序设计竞赛
- jQuery事件对象event的属性和方法
- PC电脑端QQ如何适应电脑端大小
- VFP开发Dcom程序的注意事项
- HDU 1565 方格取数(简单状态压缩DP)
- Knockout v3.4.0 中文版教程-13-控制文本内容和外观-css绑定
- 数据中心201812-4
- RabbitMQ的工作模式及消息顺序性的保证
- stm32最小原理图的PCB图绘制(含AHT20温度传感器)
- 宿舍管理系统(简单版)
- 一键调整PCB丝印,超级好用
- iOS多控制器-视图切换.
- 值得收藏!神级代码编辑器 Sublime Text 全程指南
- pcm5102a解码芯片音质评测_配备独立解码芯片 性能旗舰iQOO Pro音质再Hi-Fi
- java基础入门传智播客电子版,手撕面试官
热门文章
- STM32向量表详细分析
- 洛谷P1908求逆序对【树状数组】
- 图像语义分割python_遥感图像语义分割常用精度指标及其python实现(支持多类)
- 启动进程 问号_有两个这样的进程:僵尸进程amp;孤儿进程,蓝瘦香菇
- 客户端升级为select模型
- 设置下载安装 桌面_小妖精美化app最新版下载-小妖精美化V5.3.9.800下载安装
- 检测是否输入字母c语言程序,C语言判断字符是否为可打印字符的方法
- kaggle 房价预测经典文章
- 您有新的订单提示音_《胡闹厨房:全都好吃》PS5新手柄专属功能细节揭露
- 知识图谱(知识图谱构建)