目录
一、基本数据结构Series
Series数组的创建
Series的索引
创建带索引的Series
Series的数学运算
对series数组数据的筛查
Series的汇总
Series的计算方法
series的追加
Series的删除
二、基本数据结构DataFrame(二维数据表)
DataFrame索引
DataFrame的删除
DataFrame名称属性
三、Series与DataFrame运算
追加操作
panda是Python的一个数据分析包。基于numpy,为了解决数据分析任务而创建的程序包
导入我们的pandas软件包
import pandas as pd
Series是一种一维的数组型对象,它包含一个值序列和一个数据标签序列
这里我们可以发现Series所为我们创建的数据标签序列的起始是从0开始的连续数字。
注意:Series中的首字母S需要大写!!!
import pandas as pd
series1=pd.Series([4,5,6,723,42,53])
print(series1)
当前在我们的Series中所写的全部都是数字类型,那如果我们在series中写入不同类型的数据会怎么样呢?
在下面的代码中,我们对我们之前的数组进行了一些小改动,我们对纯整数的数组中加入了复数,字符串,程序并没有报错,但是dtype的类型变成了object。
series1=pd.Series([4,5,6,723,42,53j+5,'hello'])
print(series1)
当然,我们也可以使用下面的代码来将我们的Series数组中的索引和值单独打印出来
series1=pd.Series([4,5,6,723,42,53j+5,'hello'])
print(series1.values)
print(series1.index)
Series的索引有①直接索引,②.iloc(序号),③.loc(索引名称)
但是这三种索引方式存在一些不同的地方,在下面的代码中,我们用这三种方式来输出从[2:5]的数组元素,但是直接索引和iloc的方法实际上只会取到2,3,4序号的数据,只有.loc,也就是我们的方法③会取到2,3,4,5的四条数据
import pandas as pd
series1=pd.Series([4,5,6,723,42,53j+5,'hello'])
print(series1[2:5])
print(series1.iloc[2:5])
print(series1.loc[2:5])
当然我们也可以通过我们的索引下标来修改我们的元素
series1=pd.Series([4,5,6,723,42,53j+5,'hello'])
print(series1)
series1[2:5]=[1,0,9]
print(series1)
想要创建我们自定义的索引,我们可以将一个数列组传递给我们的index,然后我们的index索引就会变成我们所传入的数组。
gdp=pd.Series([32679,30320,24691,23000,20363],index=['上海','北京','深圳','广州','重庆'])
print(gdp)
此时将我们的索引和数据打印出来也是没有任何问题的。
x=['上海','北京','深圳','广州','重庆']
gdp=pd.Series([32679,30320,24691,23000,20363],index=x)
print(gdp.index)
print(gdp.values)
此时如果要对我们修改过名称的Series数组进行索引,我们可以使用下面的代码,我们会发现直接索引和采用iloc方法进行索引,依旧是不包含我们的边界值的,其所取的依旧是一个前闭后开的区间。
但是我们此时的loc方法如果直接将[2:4]传入让其索引是会报错的,因为此时我们的索引值已经改成了城市名,所以我们可以通过['深圳':‘广州’]之类的形式来获得我们的索引值,适应loc方法获得的索引结果都是包含边界值的。
x=['上海','北京','深圳','广州','重庆']
gdp=pd.Series([32679,30320,24691,23000,20363],index=x)
print(gdp[2:4])
print(gdp.iloc[2:4])
print(gdp.loc['深圳':'广州'])
这里对于series的log运算需要借助我们的numpy的数据包。log函数如果没有在后面写任何的数据,就会默认以e底,下面的代码中,我们以10为底就在log后面加上10作为底数
import numpy as np
x=['上海','北京','深圳','广州','重庆']
gdp=pd.Series([32679,30320,24691,23000,20363],index=x)
print(gdp*2)
print(gdp**2)
print(np.log(gdp))
print(np.log10(gdp))
当我们对我们的series数组加上一个判断条件时,我们就会得到一张布尔类型的表格
x=['上海','北京','深圳','广州','重庆']
gdp=pd.Series([32679,30320,24691,23000,20363],index=x)
print(gdp>30000)
然后我们再将这个布尔类型的数组传递给我们的gdp,我们就能得到符合我们条件的数据
x=['上海','北京','深圳','广州','重庆']
gdp=pd.Series([32679,30320,24691,23000,20363],index=x)
print(gdp[gdp>30000])
在下面的代码中,我们gdp1和gdp2的元素的第五个元素分别是重庆和广州,当我们将gdp1和gdp2相加之后,我们会发现索引值对应的元素,Series都帮我们相加到了一起,但是对于两张表不相同的元素,我们的Series所返回的是NAN元素,也就是空,那么有什么办法可以解决这个问题呢?
x=['上海','北京','深圳','广州','重庆']
y=['上海','北京','深圳','广州','天津']
gdp1=pd.Series([32679,30320,24691,23000,20363],index=x)
gdp2=pd.Series([30133,28000,22286,21500,18595],index=y)
print(gdp1+gdp2)
这里我们使用 add的方法,并在我们的方法中添加参数,将我们默认的fill_value改为0我们就能够将我们的gdp1和gdp2相加到一起
x=['上海','北京','深圳','广州','重庆']
y=['上海','北京','深圳','广州','天津']
gdp1=pd.Series([32679,30320,24691,23000,20363],index=x)
gdp2=pd.Series([30133,28000,22286,21500,18595],index=y)
print(gdp1.add(gdp2,fill_value=0))
方法名 | 功能 |
add()/radd() | 加法(+) |
sub()/rsub() | 减法(-) |
div()/rdiv() | 除法(/) |
floordiv()/rfloordiv() | 整除(//) |
mul()/rmul() | 乘法(*) |
pow/rpow() | 幂次方(**) |
这里我们可以发现gdp1.sub(gdp2)相当于gdp1-gdp2,而我们的gdp1.rsub(gdp2) 就相当于gdp2-gdp1
x=['上海','北京','深圳','广州','重庆']
y=['上海','北京','深圳','广州','天津']
gdp1=pd.Series([32679,30320,24691,23000,20363],index=x)
gdp2=pd.Series([30133,28000,22286,21500,18595],index=y)
print(gdp1.sub(gdp2,fill_value=0))
print(gdp1.rsub(gdp2,fill_value=0))
由于pandas中的append函数将要被移除,如果使用append函数会报警告,所以我们此处使用concat函数来替代。
FutureWarning: The series.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.
x=['上海','北京','深圳','广州','重庆']
y=['上海','北京','深圳','广州','天津']
z=['天津','苏州','成都','武汉','杭州']
gdp1=pd.Series([32679,30320,24691,23000,20363],index=x)
gdp2=pd.Series([30133,28000,22286,21500,18595],index=y)
gdp3=pd.Series([18809,18597,15342,14847,13500],index=z)
result=[gdp1,gdp3]
gdp4=pd.concat(result)
print(gdp4)
如果我们将两个含有相同元素的列表追加到一起,我们会得到一张有重复元素的列表
x=['上海','北京','深圳','广州','重庆']
y=['上海','北京','深圳','广州','天津']
z=['天津','苏州','成都','武汉','杭州']
gdp1=pd.Series([32679,30320,24691,23000,20363],index=x)
gdp2=pd.Series([30133,28000,22286,21500,18595],index=y)
gdp3=pd.Series([18809,18597,15342,14847,13500],index=z)
result=[gdp1,gdp2]
gdp4=pd.concat(result)
print(gdp4)
然而此时我们对我们含有重复元素的列表进行修改的话,我们会发现列表中的两个重复元素的值都被修改了。
x=['上海','北京','深圳','广州','重庆']
y=['上海','北京','深圳','广州','天津']
z=['天津','苏州','成都','武汉','杭州']
gdp1=pd.Series([32679,30320,24691,23000,20363],index=x)
gdp2=pd.Series([30133,28000,22286,21500,18595],index=y)
gdp3=pd.Series([18809,18597,15342,14847,13500],index=z)
result=[gdp1,gdp2]
gdp4=pd.concat(result)
print(gdp4)
gdp4['广州']=321
print(gdp4)
使用我们的drop方法,我们就可以将我们的对应的元素给删除。
x=['上海','北京','深圳','广州','重庆']
y=['上海','北京','深圳','广州','天津']
z=['天津','苏州','成都','武汉','杭州']
gdp1=pd.Series([32679,30320,24691,23000,20363],index=x)
gdp2=pd.Series([30133,28000,22286,21500,18595],index=y)
gdp3=pd.Series([18809,18597,15342,14847,13500],index=z)
result=[gdp1,gdp3]
gdp4=pd.concat(result)
print(gdp4.drop('上海'))
可以使用我们的字典类型来创建我们的DataFrame二维列表
x=['上海','上海','上海','北京','北京','深圳','深圳']
y=[2016,2017,2018,2017,2018,2017,2018]
z=[27466,30133,32679,28000,30320,22286,24691]
m=[2425,2415,2418,2171,2175,1077,1253]
data={'city':x,'year':y,'GDP':z,'Pop':m}
gdp=pd.DataFrame(data)
print(gdp)
我们可以使用index参数来修改我们的行索引
x=['上海','上海','上海','北京','北京','深圳','深圳']
y=[2016,2017,2018,2017,2018,2017,2018]
z=[27466,30133,32679,28000,30320,22286,24691]
m=[2425,2415,2418,2171,2175,1077,1253]
a=['one','two','three','four','five','six','seven']
data={'city':x,'year':y,'GDP':z,'Pop':m}
gdp=pd.DataFrame(data,index=a)
print(gdp)
这里我们想要索引GDP这一列的话,我们只需要将我们的二维数组列表后传入我们想要查找的列即可。
x=['上海','上海','上海','北京','北京','深圳','深圳']
y=[2016,2017,2018,2017,2018,2017,2018]
z=[27466,30133,32679,28000,30320,22286,24691]
m=[2425,2415,2418,2171,2175,1077,1253]
a=['one','two','three','four','five','six','seven']
data={'city':x,'year':y,'GDP':z,'Pop':m}
gdp=pd.DataFrame(data,index=a)
print(gdp['GDP'])
如果我们对列进行修改值,我们的整一列的数据都会被修改。
x=['上海','上海','上海','北京','北京','深圳','深圳']
y=[2016,2017,2018,2017,2018,2017,2018]
z=[27466,30133,32679,28000,30320,22286,24691]
m=[2425,2415,2418,2171,2175,1077,1253]
a=['one','two','three','four','five','six','seven']
data={'city':x,'year':y,'GDP':z,'Pop':m}
gdp=pd.DataFrame(data,index=a)
gdp['GDP']=30000
print(gdp)
当然,我们也可以使用我们上述提到的loc方法来查找我们整行的数据
print(gdp.loc['two'])
或者使用iloc方法来查找索引
print(gdp.iloc[4])
使用我们的drop方法来删除记录
print(gdp.drop('one'))
我们也可以对列进行删除,但是我们需要加上参数axis=1
print(gdp.drop('GDP',axis=1))
gdp.index.name='年度'
gdp.columns.name='项目'
print(gdp)
当我们将DataFrame于Series相减时,对应位置的元素都会被减去相应的数值。
data={'上海':[27677,30133,32679],
'北京':[24899,28000,30320],
'深圳':[19600,22286,24961],
'广州':[19493,21500,23000]}
gdp=pd.DataFrame(data,index=[2016,2017,2018])
print(gdp)
series1=pd.Series([25300,23000,18100,17500],index=['上海','北京','深圳','广州'])
print(series1)
print(gdp-series1)
追加新的记录
data={'上海':[27677,30133,32679],
'北京':[24899,28000,30320],
'深圳':[19600,22286,24961],
'广州':[19493,21500,23000]}
gdp=pd.DataFrame(data,index=[2016,2017,2018])
series1=pd.Series([25300,23000,18100,17500],index=['上海','北京','深圳','广州'])
series1.name=2015
print(gdp.append(series1).sort_index())
追加新的字段
data={'上海':[27677,30133,32679],
'北京':[24899,28000,30320],
'深圳':[19600,22286,24961],
'广州':[19493,21500,23000]}
gdp=pd.DataFrame(data,index=[2016,2017,2018])
series2=pd.Series([17559,19530,20363],index=[2016,2017,2018])
series2.index.name='重庆\'GDP'
series2.name='重庆'
gdp['重庆']=series2
print(gdp)