pandas
- 前言
- (一)、
Series
创建一维数组 - (二)、二维数组表格
DataFrame
的创建与索引的修改
* - 一、
DataFrame
的创建
– DataFrame
索引的修改
–- (三)、文件的读取和写入
* - 文件的读取
- 文件的写入
- (四)、数据的选取和处理
* - 1、数据的选取
– - 2、数据的筛选
- 3、数据的排序
– - 4、数据的运算
- 5、数据的删除
– - 6、数据表的拼接
– - 7、
concat()
函数
–
前言
pandas模块是基于NumPy模块的一个开源Python模块,广泛应用于完成数据快速分析、数据清洗和准备等工作,它的名字来源于”panel data”(面板数据)。
pandas模块提供了非常直观的数据结构及强大的数据管理和数据处理功能,某种程度上可以把pandas模块看成Python版的Excel。如果是利用Anaconda安装的Python,则自带pandas模块,无须单独安装。与NumPy模块相比,pandas模块更擅长处理二维数据,其主要有Series和DataFrame
两种数据结构。
(一)、 Series
创建一维数组
import pandas as pd
s = pd.Series(['丁一','王二','张三'])
print(s)
运行结果
0 丁一
1 王二
2 张三
dtype: object
看到s是一个一维数组结构,并且每个元素都有一个可以用来定位的行索引,
如s[1]可以定位到王二。
(二)、二维数组表格 DataFrame
的创建与索引的修改
一、 DataFrame
的创建
DataFrame 可以通过列表、字典或二维数组来创建。
1、通过列表来创建
利用 pandas
模块中的 DataFrame()
函数来创建
import pandas as pd
a = pd.DataFrame([[1,2],[3,4],[5,6]])
print(a)
运行结果
0 1
0 1 2
1 3 4
2 5 6
通过与 NumPy
模块创建的二维数组比较可以发现,DataFrame更像Excel中的二维表格,它也有行索引和列索引。需要注意的是,这里的索引序号是从0开始的。
我们还可以在创建DataFrame时自定义列索引和行索引,演示代码如下:
import pandas as pd
a = pd.DataFrame([[1,2],[3,4],[5,6]],columns=['date','score'],index=['A','B','C'])
print(a)
运行结果
date score
A 1 2
B 3 4
C 5 6
用列表来创建还有另一种方式,演示代码如下
import pandas as pd
a = pd.DataFrame()
date = [1,3,5]
score = [2,4,6]
a['date'] = date
a['score'] = score
print(a)
运行结果
date score
0 1 2
1 3 4
2 5 6
2、通过字典创建
默认以字典的键名作为列索引,演示代码如下:
import pandas as pd
a = pd.DataFrame({'a':[1,2,3],'b':[4,5,6]},index=['x','y','z'])
print(a)
运行结果
a b
x 1 4
y 2 5
z 3 6
如果想以字典的键名作为行索引,可以用 from_dict()
函数将字典转换成DataFrame,同时。设置参数orient的值为’index’。演示代码如下:
import pandas as pd
a = pd.DataFrame.from_dict({'a':[1,2,3],'b':[4,5,6]},orient='index')
print(a)
参数orient用于指定以字典的键名作为列索引还是行索引,默认值为 ‘columns 即以字典的键名作为列索引,如果设置成Index,则表示以字典的键名作为行索引。运行结果如下:
0 1 2
a 1 2 3
b 4 5 6
3、通过二维数组创建
import pandas as pd
import numpy as np
a = np.arange(12).reshape(3,4)
b = pd.DataFrame(a,index=[1,2,3],columns=['A','B','C','D'])
print(b)
运行结果
A B C D
1 0 1 2 3
2 4 5 6 7
3 8 9 10 11
DataFrame
索引的修改
重命名索引
import pandas as pd
import numpy as np
a = np.arange(12).reshape(3,4)
b = pd.DataFrame(a,index=[1,2,3],columns=['A','B','C','D'])
b = b.rename(index={1:'万科',2:'阿里',3:'百度'},columns ={'A':1,'B':2,'C':3,'D':4})
print(b)
运行结果
1 2 3 4
万科 0 1 2 3
阿里 4 5 6 7
百度 8 9 10 11
需要注意的是,rename()函数会用新索引名创建一个新的DataFrame,并不会改变b的内容.所以这里将重命名索引之后得到的新DataFrame赋给b,以便在后续代码中使用。也可以通过设置参数inplace为True来一步到位地完成索引的重命名,代码如下:
b.rename(index={1:'万科',2:'阿里',3:'百度'},columns ={'A':1,'B':2,'C':3,'D':4},inplace = True)
(三)、文件的读取和写入
文件的读取
以下代码读取名为”data.xlsx”的工作簿中的数据。
import pandas as pd
data = pd.read_excel('data.xlsx')
第2行代码中为read excel(以函数设置的文件路径参数是相对路径,即代码文件所在的路径,也可以设置成绝对路径。read-exce!(3蚤数还有其他参数,这里简单介绍几个常用参数:
- sheetname用于指定工作表,可以是工作表名称,也可以是数字(默认为0,即第1个工作表)。
- encoding用于指定文件的编码方式,一般设置为UTF-8或GBK编码,以避免中文乱码。
- indexLcol用于设置索引列。
例如,要以 UTF−8 编码方式读取工作簿”data xlvx”的第1个工作表,则可将第2行代码修改为如下代码:
data = pd.read_excel('data.xlsx',sheetname=0,encoding='utf-8')
文件的写入
import pandas as pd
import numpy as np
a = np.arange(12).reshape(3,4)
b = pd.DataFrame(a,index=[1,2,3],columns=['A','B','C','D'])
b.to_excel('data.xlsx')
如果无法运行:即可安装 openpyxl
运行结果
上图中,行索引信息被存储在工作表的第1列中,如果想在写入数据时不保留行索引信息,可以设置to _ excel()函数的参数。该函数的常用参数有:
- sheetname用于指定工作表名称。
- index用于指定是否写入行索引信息,默认为True,即将行索引信息存储在输出文件的第1列:若设置为False,则忽略行索引信息。
- columns用于指定要写入的列。
- encoding用于指定编码方式。
例如,要将data中的A列数据写入工作簿并忽略行索引信息,可编写如下代码:
(四)、数据的选取和处理
先创建一个数据
import pandas as pd
import numpy as np
import xlwings as xw
data = pd.DataFrame(np.arange(1,10).reshape(3,3),index=['r1','r2','r3'],columns=['c1','c2','c3'])
1、数据的选取
按列选取数据
选取单列
a = data['c1']
print(a)
运行结果
r1 1
r2 4
r3 7
Name: c1, dtype: int32
看到打印的数据没有列索引,可以使用如下代码
a = data[['c1']]
print(a)
选取多列
c = data[['c1','c2']]
按行选取数据
可以根据行序号来选取
a = data[1:3]
print(a)
运行结果
c1 c2 c3
r2 4 5 6
r3 7 8 9
不过按上面的方式可能会产生混乱,可以使用 iloc
方法
a = data.iloc[1:3]
print(a)
如果要选取单行就只能用 iloc
方法,如选取倒数第一行
a = data.iloc[-1]
print(a)
还可以使用 loc
方法根据行的名称来选取数据
a = data.loc[['r2','r3']]
print(a)
运行结果
c1 c2 c3
r2 4 5 6
r3 7 8 9
如果行数多可以使用 head()函数
来选取前几行数据
a = data.head(1)
print(a)
按区块选取数据
- 选取某几行的某几列数据
a = data[['c1','c3']][0:2]
print(a)
- 通常先用
ilon
方法选取行,再选取列
a = data.iloc[0:2][['c1','c3']]
print(a)
- 也可以使用
ilon
或lon
同时选取行和列
a = data.iloc[0:2,[0,2]]
print(a)
a = data.loc[['r1','r2'],['c1','c3']]
print(a)
2、数据的筛选
通过在中括号里设定条件可以过滤行。
如,筛选c1列大于1的行
a = data[data['c1']>1]
print(a)
运行结果
c1 c2 c3
r2 4 5 6
r3 7 8 9
如果有多个筛选条件,可以用’&’或’|’连接起来。 注意用小括号将条件括起来
a = data[(data['c1']>1)&(data['c2'] == 5)]
print(a)
运行结果
c1 c2 c3
r2 4 5 6
3、数据的排序
按列排序 sort_values()函数
例如,将data 按c2列进行降序排列。
a = data.sort_values(by='c2',ascending = False)
print(a)
运行结果
c1 c2 c3
r3 7 8 9
r2 4 5 6
r1 1 2 3
参数by用于指定那一列来排序;参数ascending (上升的意思)默认值为True,表示升序排序,设置为False,表示降序排列。
按行进行排序 sort_index()函数
在上排序的基础上,加上
a = a.sort_index()
print(a)
运行结果
c1 c2 c3
r1 1 2 3
r2 4 5 6
r3 7 8 9
4、数据的运算
通过数据运算可以基于已有的列生成新的一列
data = pd.DataFrame(np.arange(1,10).reshape(3,3),index=['r1','r2','r3'],columns=['c1','c2','c3'])
data['c4'] = data['c2'] + data['c3']
print(data)
运行结果
c1 c2 c3 c4
r1 1 2 3 5
r2 4 5 6 11
r3 7 8 9 17
5、数据的删除
使用 drop()函数
,该函数有以下参数
- index:用于指定删除的行
- columns:用于指定删除的列
- inplace:默认值为False,表示不改变原来的,而是返回一个执行删除操作后返回的新表。
删除列
a = data.drop(columns = 'c1')
print(a)
a = data.drop(columns = ['c1','c3'])
print(a)
删除行
a = data.drop(index = ['r1','r3'])
print(a)
注意:给出行索引时要输入行索引名称而不是序号,除非行索引名就是数字
6、数据表的拼接
merge()
函数
merge()函数可以根据一个或多个同名的列将不同数据表中的行连接起来
import pandas as pd
df1 = pd.DataFrame({'公司':['恒诚','创越','快学'],'分数':[90,95,85]})
df2 = pd.DataFrame({'公司':['恒诚','创越','京西'],'股价':[20,180,30]})
df3 = pd.merge(df1,df2)
print(df3)
运行结果
公司 分数 股价
0 恒诚 90 20
1 创越 95 180
可以看到,merge(函数直接根据相同的列名(“公司”列)对两个数据表进行了合并,而且默认选取的是两个表共有的列内容(恒盛’、’创锐)。如果同名的列不止一个,可以通过设置参数on指定按照哪一列进行合并,代码如下:
df3 = pd.merge(df1,df2,on ='公司')
默认的合并方式其实是取交集(inner连接》,即选取两个表共有的内容。如果想取并集(outer)连接),即选取两个表所有的内容,可以设置参数how,代码如下:
df3 = pd.merge(df1,df2,how = 'outer')
公司 分数 股价
0 恒诚 90.0 20.0
1 创越 95.0 180.0
2 快学 85.0 NaN
3 京西 NaN 30.0
如果只要左边的全部内容,how参数为left,右边则是 right
想按行索引合并
df3 = pd.merge(df1,df2,left_index= True,right_index=True)
print(df3)
运行结果
公司_x 分数 公司_y 股价
0 恒诚 90 恒诚 20
1 创越 95 创越 180
2 快学 85 京西 30
7、 concat()
函数
concat()函数使用全连接(UNIONALL)方式完成拼接,它不需要对齐,而是直接进行合并,即不需要两个表有相同的列或索引,只是把数据整合到一起。因此,该函数没有参数how和0n。而是用参数axis指定连接的轴向。
行方向拼接(纵向拼接)
df3 = pd.concat([df1,df2])
print(df3)
运行结果
公司 分数 股价
0 恒诚 90.0 NaN
1 创越 95.0 NaN
2 快学 85.0 NaN
0 恒诚 NaN 20.0
1 创越 NaN 180.0
2 京西 NaN 30.0
我们发现索引还是原来的,我们可以设置 ignore_index
为True来忽略原有的索引。
df3 = pd.concat([df1,df2],ignore_index = True)
横向拼接
df3 = pd.concat([df1,df2],axis = 1)
Original: https://blog.csdn.net/qq_39838607/article/details/120080118
Author: 落春只在无意间
Title: 数据导入和整理模块—pandas
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/678215/
转载文章受原作者版权保护。转载请注明原作者出处!