前言:
📢📢📢
🏅🏅🏅作者简介:是Dream呀,华为云享专家、CSDN原力计划作者、Python领域优质创作者,专注分享Python领域原创系列文章。
🌻🌻🌻热门专栏:【零基础学Python】
本课程是针对Python入门&进阶打造的一全套课程,在这里,我将会一 一更新Python基础语法、Python爬虫、Web开发、 Django框架、Flask框架以及人工智能相关知识,帮助你成为Python大神,如果你喜欢的话就抓紧收藏订阅起来吧~💘💘💘
🍋🍋🍋如果对学习没有自制力或者没有一起学习交流的动力,欢迎私信我或者文末添加vx,拉你进群,群内有行业大佬帮大家解答疑问,我们一起学习,群内定期还会有抽奖活动和红包相送嗷,快来进入我们吧~
💕 入门须知:这片乐园从不缺乏天才,努力才是你的最终入场券!🚀🚀🚀
💓最后,愿我们都能在看不到的地方闪闪发光,一起加油进步🍺🍺🍺
Pandas具有Series和DataFrame两个最重要的数据类型:
Series:一维
DataFrame:二维
创建Series对象的函数是Serier(),主要参数是data和index:
pandas.Series(data=None,index=None,name=None)
参数说明:
import pandas as pd import numpy as np print('通过ndarray创建的Series为:\n',pd.Series(np.arange(3),index=['a','b','c'],name='ndarray'))
'运行
通过ndarray创建的Series为:
a 0
b 1
c 2
Name: ndarray, dtype: int32
dict的键作为Series的索引,dict的值作为Series的值,因此无需传入index参数。
import pandas as pd dict = {'a':0,'b':1,'c':2,'d':3,'e':4} print('通过dict创建的Series为:\n',pd.Series(dict))
'运行
通过dict创建的Series为:
a 0
b 1
c 2
d 3
e 4
dtype: int64
import pandas as pd list1 = [0,1,2,3,4] print('通过list创建的Series为:\n',pd.Series(list1,index=['a','b','c','d','e']))
'运行
通过list创建的Series为:
a 0
b 1
c 2
d 3
e 4
dtype: int64
Series拥有以下8个属性:
import pandas as pd seriesl = pd.Series([1,2,3,4]) print('seriesl:\n{}'.format(seriesl)) print('seriesl.values:{}'.format(seriesl.values)) print('seriesl.index:{}'.format(seriesl.shape)) print('seriesl.ndim:{}'.format(seriesl.ndim))
'运行
seriesl:
0 1
1 2
2 3
3 4
dtype: int64
seriesl.values:[1 2 3 4]
seriesl.index:(4,)
seriesl.ndim:1
import pandas as pd series2 = pd.Series([1,2,3,4,5,6,7],index=['A','B','C','D','E','F','G']) print('series2位于第一位置的数据为:',series2[0]) print('E is {}\n'.format(series2['E']))
'运行
series2位于第一位置的数据为: 1
E is 5
import pandas as pd list1=[1,2,3,4,5] seriesl = pd.Series(list1,index=['a','b','c','d','e'],name='List') print('seriesl:\n{}'.format(seriesl)) # 更新元素 seriesl['a'] = 3 print('更新后的Seriesl为:\n',seriesl)
'运行
seriesl:
a 1
b 2
c 3
d 4
e 5
Name: List, dtype: int64
更新后的Seriesl为:
a 3
b 2
c 3
d 4
e 5
Name: List, dtype: int64
通过append()方法在原来的Series上追加新的Series。若只在原来Serise上插入单个值,采用赋值方式。
import pandas as pd
list1 = [0,1,2,3,4]
series1 = pd.Series(list1,index=['a','b','c','d','e'],name='list')
print('seriesl:\n{}'.format(seriesl))
series2 = pd.Series([4,5],index=['f','g'])
# 追加Series
print('在Series1后插入series2为:\n',series1.append(series2))
seriesl:
a 3
b 2
c 3
d 4
e 5
Name: List, dtype: int64
在Series1后插入series2为:
a 0
b 1
c 2
d 3
e 4
f 4
g 5
dtype: int64
import pandas as pd list1 = [0,1,2,3,4] series1 = pd.Series(list1,index=['a','b','c','d','e'],name='list') print('series1:\n{}'.format(series1)) # 删数据 series1.drop('e',inplace=True) print('删除e索引后的series:\n',series1)
'运行
series1:
a 0
b 1
c 2
d 3
e 4
Name: list, dtype: int64
删除e索引后的series:
a 0
b 1
c 2
d 3
Name: list, dtype: int64
Data类似于数据库中的表,既有行索引也有列索引,DataFrame可以看做是Series组成的字典,每个Series是DataFrame的一列。
DataFrame语法结构:
pandas.DataFrame(data=None,columns=None,dtype=None,copy=False)
参数说明:
import pandas as pd dict1 = {'col1':[0,1,2,3,4],'col2':[5,6,7,8,9]} print('通过dict创建的DataFrame为:\n ',pd.DataFrame(dict1,index=['a','b','c','d','e']))
'运行
通过dict创建的DataFrame为:
col1 col2
a 0 5
b 1 6
c 2 7
d 3 8
e 4 9
import pandas as pd list5 =[[0,5],[1,6],[2,7],[3,8],[4,9]] print('通过list创建的DataFrame为:\n',pd.DataFrame(list5,index=['a','b','c','d','e'],columns=['col1','col5']))
'运行
通过list创建的DataFrame为:
col1 col5
a 0 5
b 1 6
c 2 7
d 3 8
e 4 9
以Series创建DataFrame,每个Series为一行,而不是一列:
import pandas as pd noteSeries = pd.Series(['C','D','E','F','G','A','B'],index = [1,2,3,4,5,6,7]) weekdaySeries = pd.Series(['Mon','Tue','Wed','Thu','Fri','Sat','Sun'],index = [1,2,3,4,5,6,7]) df4 = pd.DataFrame([noteSeries,weekdaySeries]) print('df4:\n{}'.format(df4))
'运行
df4:
1 2 3 4 5 6 7
0 C D E F G A B
1 Mon Tue Wed Thu Fri Sat Sun
DataFrame是二维数据结构,包含列索引,比Series具有更多的属性。DataFrame常见的属性及其说明如下:
import pandas as pd df = pd.DataFrame({'col1':[0,1,2,3,4],'col2':[5,6,7,8,9]},index=['a','b','c','d','e']) print(df) print('DataFrame的index为:',df.index) print('DataFrame的列标签为:',df.columns) print('DataFrame的轴标签',df.axes) print('DataFrame的维度:',df.ndim) print('DataFrame的维度:',df.shape)
'运行
col1 col2
a 0 5
b 1 6
c 2 7
d 3 8
e 4 9
DataFrame的index为: Index([‘a’, ‘b’, ‘c’, ‘d’, ‘e’], dtype=‘object’)
DataFrame的列标签为: Index([‘col1’, ‘col2’], dtype=‘object’)
DataFrame的轴标签 [Index([‘a’, ‘b’, ‘c’, ‘d’, ‘e’], dtype=‘object’), Index([‘col1’, ‘col2’], dtype=‘object’)]
DataFrame的维度: 2
DataFrame的维度: (5, 2)
head()和tail()方法用于访问DataFrame前n行和后n行数据,默认返回5行数据。
print('默认返回前5行数据:\n',df.head())
print('默认返回后3行数据:\n',df.tail(3))
默认返回前5行数据:
col1 col2
a 0 5
b 1 6
c 2 7
d 3 8
e 4 9
默认返回后3行数据:
col1 col2
c 2 7
d 3 8
e 4 9
import pandas as pd df = pd.DataFrame({'col1':[0,1,2,3,4],'col2':[5,6,7,8,9]},index=['a','b','c','d','e']) print('DataFrame为:\n',df) # 更新列 df['col1']=[10,11,12,13,14] print('更新后的DataFrame为\n:',df)
'运行
DataFrame为:
col1 col2
a 0 5
b 1 6
c 2 7
d 3 8
e 4 9
更新后的DataFrame为
: col1 col2
a 10 5
b 11 6
c 12 7
d 13 8
e 14 9
import pandas as pd df3 = pd.DataFrame({'note':['C','D','E','F','G','A','B'],'weekday':['Mon','Tue','Wed','Thu','Fri','Sat','Sun']}) print('df3:\n{}'.format(df3)) df3['No.'] = pd.Series([1,2,3,4,5,6,7]) # 采用赋值的方法插入列 相当于df3['No.'] = [1,2,3,4,5,6,7] print('df3:\n{}'.format(df3)) del df3['weekday'] # 删除列的方法有很多,如del()、pop()、drop()等 print('df3:\n{}'.format((df3)))
'运行
df3:
note weekday
0 C Mon
1 D Tue
2 E Wed
3 F Thu
4 G Fri
5 A Sat
6 B Sun
df3:
note weekday No.
0 C Mon 1
1 D Tue 2
2 E Wed 3
3 F Thu 4
4 G Fri 5
5 A Sat 6
6 B Sun 7
df3:
note No.
0 C 1
1 D 2
2 E 3
3 F 4
4 G 5
5 A 6
6 B 7
drop()犯法可以删除行或者列,基本语法格式如下:
DataFrame。drop(labels,axis,levels,inplace)
参数说明如下:
import pandas as pd df = pd.DataFrame({'col1':[0,1,2,3,4],'col2':[5,6,7,8,9]},index=['a','b','c','d','e']) df['col3'] = [15,16,17,18,19] print('插入列后的DataFrame为:\n',df) df.drop(['col3'],axis=1,inplace = True) print('删除col3列DataFrame为:\n',df) # 删除行 df.drop('a',axis=0,inplace=True) print('删除a行的DataFrame为:\n',df)
'运行
插入列后的DataFrame为:
col1 col2 col3
a 0 5 15
b 1 6 16
c 2 7 17
d 3 8 18
e 4 9 19
删除col3列DataFrame为:
col1 col2
a 0 5
b 1 6
c 2 7
d 3 8
e 4 9
删除a行的DataFrame为:
col1 col2
b 1 6
c 2 7
d 3 8
e 4 9
Index对象可以通过pandas.Index()函数创建,也可以通过创建数据对象Series、DataFrame时接收index或者column参数创建,前者属于显示创建,后者属于隐式创建。
Index对象属性说明:
Matplotlib绘制图表需要各个基础组件对象,工作量较大。而Pandas使用行列标签以及分组信息,较为简便的完成图表的制作,Pandas作图函数:
import pandas as pd import numpy as np import matplotlib.pyplot as plt # 调用plot.pie()对生成的一列随机数的Series数据绘制饼图 df1 = pd.Series(3*np.random.rand(4),index=['a','b','c','d'],name='series') # print(df1) df1.plot.pie(figsize=(6,6)) plt.show() # df1.plot()、
'运行
# 调用plot.bar()对生成的四列随机数的DataFrame绘制条形图
df2 = pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d'])
# print(df2)
df2.plot.bar()
plt.show()
# 调用plot.box()对生成的五列随机数的DataFrame绘制箱型图
df3 = pd.DataFrame(np.random.rand(10,5),columns=['A','B','C','D','E'])
df3.plot.box()
plt.show()
# 调用plot.scatter()对生成的四列随机数的DataFrame数据绘制散点图
df4 = pd.DataFrame(np.random.rand(50,4),columns=['a','b','c','d'])
df4.plot.scatter(x='a',y='b')
plt.show()
import pandas as pd import numpy as np import matplotlib.pyplot as plt # 调用plot.pie()对生成的一列随机数的Series数据绘制饼图 df1 = pd.Series(3*np.random.rand(4),index=['a','b','c','d'],name='series') # print(df1) df1.plot.pie(figsize=(6,6)) plt.show() # df1.plot()、 # 调用plot.bar()对生成的四列随机数的DataFrame绘制条形图 df2 = pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d']) # print(df2) df2.plot.bar() plt.show() # 调用plot.box()对生成的五列随机数的DataFrame绘制箱型图 df3 = pd.DataFrame(np.random.rand(10,5),columns=['A','B','C','D','E']) df3.plot.box() plt.show() # 调用plot.scatter()对生成的四列随机数的DataFrame数据绘制散点图 df4 = pd.DataFrame(np.random.rand(50,4),columns=['a','b','c','d']) df4.plot.scatter(x='a',y='b') plt.show()
'运行