Pandas是python第三方库,提供高性能易用数据类型和分析工具。Pandas基于NumPy实现,常与NumPy和Matplotlib一同使用。pandas库引用: import pandas as pd
包括两个数据类型:Series(相当于一维数据类型),DataFrame(相当于二维-多维数据类型),构成pandas的基础。进行基本操作、运算操作、特征类操作(提取数据特征)、关联类操作(挖掘数据关联关系)
Series类型 = 索引 + 一维数据
Series类型由一组数据及与之相关的数据索引组成。(数据和索引的对应关系)是一维带“标签”的数组,
Series类型索引
自动索引/自定义索引(index=[])pd.Series([ ],index=[ ]),index一词可省略,但index里的‘’不能省
Series类型创建
pd.Series([6,7,8]) pd.Series(25,index=['a','b','c']) pd.Series({'a':8,'b':9}) pd.Series(np.arange(5))
Series类型的基本操作
包括b.index和b.values两部分,索引、切片、运算
类似ndarray类型,索引切片,运算
似python字典类型,in,.get()方法
Series类型的对齐操作
Series类型有索引,是基于索引的计算,更精确不易出错;numpy是基于维度的计算。
Series类型的name属性
Series对象和索引都可以有一个名字,存储在属性.name中。b.name=' ' b.index.name=' '
Series类型的修改
Series对象可以随时修改并即刻生效。b[' '] = 15 b[' ',' '] = 15
DataFrame类型 = 行列索引 + 二维数据
DataFrame是二维带“标签”数组,基本操作类似Series,依据行列索引获得。多列数据共用1列索引。
DataFrame是一个表格型的数据类型,每列值类型可不同。有行索引,也有列索引。常用于表达二维数据,也可表达多维数据。
axis=1 :数组的变化为横向,体现出列的增加或者减少。当axis=0时,数组的变化是纵向的,体现出行的增加或减少。
DataFrame类型的创建
二维ndarray对象创建
两个一维Series创建,以字典形式组织,字典的键即为列索引,从左到右---从上到下排列下来。
dl = {'城市':['北京','上海','广州','深圳','沈阳'],
'环比':[101.5,101.2,101.3,102.0,100.1],
'同比':[120.7,127.3,119.4,140.9,101.4],
'定基':[121.4,127.8,120.0,145.5,101.6]}
d = pd.DataFrame(dl) #d = pd.DataFrame(dl,index=['c1','c2','c3','c4','c5'])
d
Out[43]:
城市 环比 同比 定基
0 北京 101.5 120.7 121.4
1 上海 101.2 127.3 127.8
2 广州 101.3 119.4 120.0
3 深圳 102.0 140.9 145.5
4 沈阳 100.1 101.4 101.6
import pandas as pd
dl = {'城市':pd.Series(['北京','上海','广州','深圳','沈阳']),
'环比':pd.Series([101.5,101.2,101.3,102.0,100.1]),
'同比':pd.Series([120.7,127.3,119.4,140.9,101.4]),
'定基':pd.Series([121.4,127.8,120.0,145.5,101.6])}
#'环比':pd.Series([101.5,101.2,101.3,102.0,100.1],index=['c1','c2','c3','c4','c5']),
pd.DataFrame(dl)
Out[51]:
城市 环比 同比 定基
0 北京 101.5 120.7 121.4
1 上海 101.2 127.3 127.8
2 广州 101.3 119.4 120.0
3 深圳 102.0 140.9 145.5
4 沈阳 100.1 101.4 101.6
Pandas库的数据类型操作
如何改变Series和DataFrame对象? 增加或重排:重新索引 删除:drop
.reindex( )能够改变或重排Series和DataFrame索引
.drop( )能够删除Series和DataFrame指定行或列索引 d.drop('c5')---删除c5行,d.drop('同比',axis=1)---删除'同比'列
Pandas库的数据类型运算
算数运算
比较运算
![](https://i-blog.csdnimg.cn/blog_migrate/6d78e1b26c1b74ebc40dc57b3b4179f1.png)
Pandas的数据特征分析
数据的排序 .sort_index( )/.sort_values( )
pandas库既可以操作索引,又可以操作数据。数据的排序,Pandas提供了两种方法。
.sort_index( )方法在指定轴上根据索引进行排序,默认升序。
.sort_index(axis=0,ascending=True) ascending=True表示递增排序
.sort_values( )方法在指定轴上 根据数值进行排序,默认升序。
.sort_values(索引,axis=0/1,ascending=True/False) 索引必须有,默认0轴,默认升序
!对数值进行排序,直接标明列索引/标明行索引+axis=1
NaN统一放到排序末尾
数据的基本统计分析 .describe( )
对于DataFrame格式的,要获取整行的信息或者对行进行排列,需行标签外还需要其他,如axis=1,ix
数据的累计统计分析 .cum*( )/.rolling( ).*( )
数据的相关分析 .corr( )/.cov( )
相关分析:两个事物,表示为X和Y,如何判断它们之间的存在相关性?
相关性:X增大,Y增大,两个变量正相关; X增大,Y减小,两个变量负相关; X增大,Y无视(无明显变化),两个变量不相关。 ——基础的描述,如何度量???
实例:房价增幅与M2增幅的相关性
import pandas as pd
hprice = pd.Series([3.04,22.93,12.75,22.6,12.33],index=['2008','2009','2010','2011','2012'])
m2 = pd.Series([8.18,13.18,9.13,7.82,6.69],index=['2008','2009','2010','2011','2012'])
hprice.corr(m2)
Out[21]: 0.48136149747121026
pandas读取excel数据
data = pd.read_excel(io,sheet_name='Sheet1',
header / names / index_col / usecols / squeeze=True/False / skiprows= / nrows= / skipfooter /parse_dates),
sheet_name = 1代表第2个工作表;sheet_name = 'Sheet5'代表第5个sheet;sheet_name = '红色资源'目标Sheet的名称。
sheet_name = [0, '英超射手榜', 'Sheet4'],组合列表,读取三个工作表:第1个工作表、名为“英超射手榜”工作表、第4个工作表。
header, 用哪一行作列名:默认为0 ,如果header = [0,1],则表示将前两行作为多重索引。
names, 自定义最终列名,适用于Excel缺少列名,或需重新定义列名,names的长度须和Excel列长度一致,否则会报错。
index_col, 用作索引的列,如index_col = '排名';整型或整型列表,如index_col = 0 或 [0, 1],选择多个列,则返回多重索引。
usecols,需要读取哪些列,usecols = [0,2,3];usecols = 'A:C, E';
squeeze,当数据仅包含一列,squeeze为True返回Series,反之返回DataFrame (print(type(data))可查看是Series/DataFrame)
skiprows,跳过特定行,skiprows= n,跳过前n行; skiprows = [a, b, c],跳过第a+1,b+1,c+1行(索引从0开始);可能首行(即列名)也会被跳过。
nrows ,需要读取的行数,如果只想了解Excel的列名及概况,不必读取全量数据,nrows会十分有用。 nrows = 10
skipfooter , 跳过末尾n行,skipfooter = 43
parse_dates:将csv中的时间字符串转换成日期格式
import pandas as pd
io = r'C:\Users\木头目\Desktop\1.xls'
data = pd.read_excel(io,sheet_name='Sheet1',header=[0,1])
print(data.head())
地点 起始坐标 终点坐标
0 红军树 108.703668,29.241944 106.550483,29.563707
1 黔江纪念碑 108.773174,29.664914 106.550483,29.563707
2 马喇湖纪念碑 108.867973,29.307534 106.550483,29.563707
3 水车坪纪念地 108.872107,29.306239 106.550483,29.563707
4 万涛故居 108.798008,29.398731 106.550483,29.563707
原文链接:https://blog.csdn.net/weixin_38546295/article/details/83537558
pandas去重神器:df.drop_duplicates()
a = data.groupby(['User_ID','Gender']):对数据data(DataFrame结构)按’User_ID’和’Gender’分组
python-把excel里面的数据存储到矩阵中
读取excel/csv文件数据后,在训练模型之前常要对数据进行数组转化。(将DataFrame的表格类型转为ndarray的数组类型)
注:.as_matrix()方法将会在未来版本移除,请使用 .values。
import pandas as pd #导入pandas库
df = pd.read_excel("data.xlsx") # 读取excle
#以下方法等价
array1 = df.values #方法一
array2 = df.as_matrix() #方法二 注意:此方法将会在未来版本移除,请使用 .values
array3 = np.array(df) #方法三
Dataframe指定列转化为矩阵matrix、数组list
import numpy as np
import pandas as pd
#创建数据框data
data=pd.DataFrame(np.arange(16).reshape(4,4),index=list('ABCD'),columns=list('EFGH'))
print(type(data))
print(data)
#将所有数据输出为矩阵
data1 = data.values
print(type(data1))
print(data1)
#将指定列输出为矩阵
data2 = data[['E','F']].values
print(type(data2))
print(data2)
#将制定列输出为数组
data3 = data['E'].tolist()
print(type(data3))
print(data3)
<class 'pandas.core.frame.DataFrame'>
E F G H
A 0 1 2 3
B 4 5 6 7
C 8 9 10 11
D 12 13 14 15
<class 'numpy.ndarray'>
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
<class 'numpy.ndarray'>
[[ 0 1]
[ 4 5]
[ 8 9]
[12 13]]
<class 'list'>
[0, 4, 8, 12]
List、Series 类型转换为DataFrame类型并保存为excel或csv文件
想要将数据以excel/csv文件保存,需要将其转换为DataFrame类型
y1 = pd.DataFrame(clusters) #clusters为Series数据,y1为DataFrame数据
y1.to_csv('new1.xlsx') #保存为csv文件
y1.to_excel('new1.xlsx') #保存为excel文件