注:关于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数据类型中的某一(多)行(列)

这里记录三个可以实现该功能的函数:locilocix

  • 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,返回一个新的DataFrame

  • set_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=0axis='index’删除含有缺失值的行,axis=1axis='columns’删除含有缺失值的列。
  • howany存在即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库简单入门相关推荐

  1. Pandas库——DataFrame入门

    文章目录 一.简介 二.创建 1.python字典型 2.嵌套list/numpy的多维数组 3.文件读取 三.操作 1.索引的赋值 2.查看 3.添加 4.修改 5.删除 一.简介 DataFram ...

  2. python3-matplotlib库简单入门

    作者: 明天依旧可好 QQ交流群: 807041986 最新更新时间: 2020-12-10 注:关于matplotlib库的相关问题,若本文未涉及可在下方留言告诉我,我会在文章中进行补充的 原文链接 ...

  3. python如何安装panda数据库_在Pycharm中安装Pandas库方法(简单易懂)

    开发环境的搭建是一件入门比较头疼的事情,在上期的文稿基础上,增加一项Anaconda的安装介绍.Anaconda是Python的一个发行版本,安装好了Anaconda就相当于安装好了Python,并且 ...

  4. Python Pandas库 最快入门教程(最简单最详细)

    文章目录 1.导入Pandas库 2.创建Series对象 3.获取Series中的所有索引和值 4.判断Series是否包含某一个索引 5.对齐两个Series 6.为Series及其索引列命名 7 ...

  5. Python数据分析~Pandas库30分钟快速入门

    目录 1  Pandas序列和数据表 2 Pandas数据聚合与分组运算 3 Pandas数据可视化 Pandas库在数据分析中是非常重要和常用的库,它利用数据框让数据的处理和操作变的简单和快捷.在数 ...

  6. 【python教程入门学习】Pandas库下载和安装

    Python 官方标准发行版并没有自带 Pandas 库,因此需要另行安装.除了标准发行版外,还有一些第三方机构发布的 Python 免费发行版, 它们在官方版本的基础上开发而来,并有针对性的提前安装 ...

  7. Pandas库DataFrame的简单应用2

    Pandas练习2 练习题 DataFrame的简单应用 练习1 代码 效果图 练习2 代码 效果图 小结 练习题 DataFrame的简单应用 练习1 代码 import pandas as pd# ...

  8. 第三周 数据分析之概要 Pandas库入门

    Pandas库介绍: Pandas库引用:Pandas是Python第三方库,提供高性能易用数据类型和分析工具 import pandas as pd Pandas基于NumPy实现,常与NumPy和 ...

  9. Pandas库入门详细教程

    Pandas库的介绍 1.Pandas是Python第三方库,提供高性能易用数据类型和分析工具. 2.Pandas基于NumPy实现,常与NumPy和Matplotlib一同使用. 3.Pandas库 ...

最新文章

  1. Android apk动态加载机制的研究
  2. linux与安卓系统目录,android系统架构及源码目录结构
  3. redhat enterprise 5 在 VMware 6.5 中中文显示乱码的解决办法
  4. CRM Extension field render and property handling
  5. 金坛区实验幼儿园服务器不稳定,2019年金坛城区部分公办幼儿园服务区划分方案(试行)...
  6. poj2456 二分搜索 挑战程序设计竞赛
  7. jQuery事件对象event的属性和方法
  8. PC电脑端QQ如何适应电脑端大小
  9. VFP开发Dcom程序的注意事项
  10. HDU 1565 方格取数(简单状态压缩DP)
  11. Knockout v3.4.0 中文版教程-13-控制文本内容和外观-css绑定
  12. 数据中心201812-4
  13. RabbitMQ的工作模式及消息顺序性的保证
  14. stm32最小原理图的PCB图绘制(含AHT20温度传感器)
  15. 宿舍管理系统(简单版)
  16. 一键调整PCB丝印,超级好用
  17. iOS多控制器-视图切换.
  18. 值得收藏!神级代码编辑器 Sublime Text 全程指南
  19. pcm5102a解码芯片音质评测_配备独立解码芯片 性能旗舰iQOO Pro音质再Hi-Fi
  20. java基础入门传智播客电子版,手撕面试官

热门文章

  1. STM32向量表详细分析
  2. 洛谷P1908求逆序对【树状数组】
  3. 图像语义分割python_遥感图像语义分割常用精度指标及其python实现(支持多类)
  4. 启动进程 问号_有两个这样的进程:僵尸进程amp;孤儿进程,蓝瘦香菇
  5. 客户端升级为select模型
  6. 设置下载安装 桌面_小妖精美化app最新版下载-小妖精美化V5.3.9.800下载安装
  7. 检测是否输入字母c语言程序,C语言判断字符是否为可打印字符的方法
  8. kaggle 房价预测经典文章
  9. 您有新的订单提示音_《胡闹厨房:全都好吃》PS5新手柄专属功能细节揭露
  10. 知识图谱(知识图谱构建)