pandas 是基于NumPy 的一种工具,是为了解决数据分析任务而创建的,提供了很多进行数据分析处理的函数。
Series类型数据是一维数组型,除了数据之外还有一组索引。
DataFrame类型数据是表格型数据,即有行索引又有列索引,每列数据可以是不同的数据类型。
(1)Series的创建与基本操作
– 对于Series类型的数据结构的创建方法如下:
s1=pd.Series([1,2,3,4]) #创建一个Series数据类型,索引为默认值,即从0开始
print(s1)
执行结果为:
0 1
1 2
2 3
3 4
dtype: int64
说明:第一列中的0,1,2,3是Series的索引
print(s1.index) #查看Series的索引
执行结果为:
RangeIndex(start=0, stop=4, step=1)
print(s1.values) #查看Series的序列值
执行结果为:
[1 2 3 4]
s2=pd.Series([2,3,4,5.0,6.6],index=['a','b','c','d','e']) #创建Series时指定索引值
print(s2)
执行结果为:
a 2.0
b 3.0
c 4.0
d 5.0
e 6.6
dtype: float64
dict1={'id':12,'name':'liu','age':18} #Series可以看成是一个定长的有序字典,字典的Key相当于Series中的索引,字典Value相当于Series中的值
s3=pd.Series(dict1)
print(s3)
执行结果为:
id 12
name liu
age 18
dtype: object
– 对于创建的Series,可以根据索引来查询对应的Series值,实现方法如下::
i1=s2['d'] #根据索引取Series值
print("i1=",i1)
执行结果为:
i1= 5.0
i2=s2[['a','b']] #根据多个索引取相应的Series值
print(i2)
执行结果为:
a 2.0
b 3.0
(2)DataFrame的创建与基本操作
– DataFrame类型的数据定义方法如下:
data={'name':['liu','zhang','li'],
'sex':['男','女','男'],
'age':[10,12,13]}
df1=pd.DataFrame(data,index=[1,2,3]) #可以通过字典创建DataFrame,若不指定行与列索引的取值,则默认取值从0开始
print(df1)
执行结果为:
name sex age
1 liu 男 10
2 zhang 女 12
3 li 男 13
df2=pd.DataFrame(np.arange(12).reshape(3,4),index=['a','c','b'],columns=[11,13,10,12]) #将二维数组转化为DataFrame类型数据,若不指定行与列索引的取值,默认取值从0开始
print(df2)
执行结果为:
11 13 10 12
a 0 1 2 3
c 4 5 6 7
b 8 9 10 11
arr1=np.array([[1,2,3,4],[2,3,4,5]]) #若要指定DataFrame中的特定取值,可以通过二维数据创建
df3=pd.DataFrame(arr1,index=np.arange(2),columns=np.arange(4))
print(df3)
执行结果为:
0 1 2 3
0 1 2 3 4
1 2 3 4 5
print(df3.columns) #获取DataFrame数据的列索引
执行结果为:
Int64Index([11, 13, 10, 12], dtype='int64')
print(df3.index) #获取DataFrame数据的行索引
执行结果为:
Index(['a', 'c', 'b'], dtype='object')
print(df3.values) #获取DataFrame中的数据值
执行结果为:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
print(df3.describe()) #获取DataFrame数据中的最大最小值以及四分位数
执行结果为:
11 13 10 12
count 3.0 3.0 3.0 3.0
mean 4.0 5.0 6.0 7.0
std 4.0 4.0 4.0 4.0
min 0.0 1.0 2.0 3.0
25% 2.0 3.0 4.0 5.0
50% 4.0 5.0 6.0 7.0
75% 6.0 7.0 8.0 9.0
max 8.0 9.0 10.0 11.0
– 对DataFrame类型数据进行转置、排序,基本操作如下:
df4=df3.T #DataFrame类型数据进行转置
print(df4)
执行结果如下:
a c b
11 0 4 8
13 1 5 9
10 2 6 10
12 3 7 11
print(df3.sort_index(axis=1)) #根据列索引值的大小对数据进行排序
执行结果如下:
10 11 12 13
a 2 0 3 1
c 6 4 7 5
b 10 8 11 9
print(df3.sort_index(axis=0,ascending=False)) #根据行索引值的大小对数据进行排序,使用ascending=False实现降序排列
执行结果如下:
11 13 10 12
c 4 5 6 7
b 8 9 10 11
a 0 1 2 3
print(df3.sort_values(by=10,ascending=False)) #对列索引值为10的一列数据进行降序排序
执行结果如下:
11 13 10 12
b 8 9 10 11
c 4 5 6 7
a 0 1 2 3
– 对DataFrame类型数据进行查询选择,可以使用loc、iloc进行查询,其中loc是从索引中获取具有特定标签的行(或列);iloc是在索引中的特定位置获取行(或列)(因此它只接受整数)。基本操作过程如下:
dates=pd.date_range('20210101',periods=6)
df5=pd.DataFrame(np.arange(24).reshape(6,4),index=dates,columns=['A','B','C','D'])
print(df5)
执行结果如下:
A B C D
2021-01-01 0 1 2 3
2021-01-02 4 5 6 7
2021-01-03 8 9 10 11
2021-01-04 12 13 14 15
2021-01-05 16 17 18 19
2021-01-06 20 21 22 23
data1=df5['A'] #从DataFrame中获取一列数据为Series类型数据
print(data1)
执行结果如下:
2021-01-01 0
2021-01-02 4
2021-01-03 8
2021-01-04 12
2021-01-05 16
2021-01-06 20
data2=df5.B #从DataFrame中获取一列数据为Series类型数据
print(data2)
执行结果如下:
2021-01-01 0
2021-01-02 4
2021-01-03 8
2021-01-04 12
2021-01-05 16
2021-01-06 20
data3=df5[0:2] #从DataFrame中获取前两行
print(data3)
执行结果如下:
A B C D
2021-01-01 0 1 2 3
2021-01-02 4 5 6 7
data4=df5['20210101':'20210102'] #根据行索引值获取前两行
print(data4)
执行结果如下:
A B C D
2021-01-01 0 1 2 3
2021-01-02 4 5 6 7
data5=df5.loc['20210101',['A','D']] #选择行索引为'202101010',列索引为'A','D'的数据
print(data5)
执行结果如下:
A 0
D 3
Name: 2021-01-01 00:00:00, dtype: int32
data6=df5.loc[:,:] #选择所有行所有列的值
print(data6)
执行结果为:
A B C D
2021-01-01 0 1 2 3
2021-01-02 4 5 6 7
2021-01-03 8 9 10 11
2021-01-04 12 13 14 15
2021-01-05 16 17 18 19
2021-01-06 20 21 22 23
data7=df5.iloc[0:3,2:4] #根据位置选择第1~3行,3~4列的数据
print(data7)
执行结果如下:
C D
2021-01-01 2 3
2021-01-02 6 7
2021-01-03 10 11
data8=df5.iloc[[1,2,4],[1,3]] #根据位置提取不连续的行与列的数据
print(data8)
B D
2021-01-02 5 7
2021-01-03 9 11
2021-01-05 17 19
result=data8>7 #对于DataFrame中的数据进行逻辑判断,是否大于7
print(result)
执行结果为:
B D
2021-01-02 False False
2021-01-03 True True
2021-01-05 True True
– 对DataFrame类型数据进行赋值及一些操作,基本的操作过程如下:
dates=np.arange(20210101,20210107)
df6=pd.DataFrame(np.arange(24).reshape(6,4),index=dates,columns=['A','B','C','D'])
print(df6)
执行结果为:
A B C D
20210101 0 1 2 3
20210102 4 5 6 7
20210103 8 9 10 11
df6.iloc[2,3]=100 #对DataFrame中某一个数据进行赋值,即将第3行第4列的数据赋值为100
print(df6)
执行结果为:
A B C D
20210101 0 1 2 3
20210102 4 5 6 7
20210103 8 9 10 100
df6[df6.A>3]=0 #将df6中满足A列数据大于3的所有行赋值为0
print(df6)
执行结果为:
A B C D
20210101 0 1 2 3
20210102 0 0 0 0
20210103 0 0 0 0
df6['E']=10 #添加一列数据,该列的所有行取相同的值
print(df6)
执行结果为:
A B C D E
20210101 0 1 2 3 10
20210102 0 0 0 0 10
20210103 0 0 0 0 10
df6['F']=pd.Series([1,2,3],index=dates) #添加一列数据,该列的所有行取指定值
print(df6)
执行结果为:
A B C D E F
20210101 0 1 2 3 10 1
20210102 0 0 0 0 10 2
20210103 0 0 0 0 10 3
(1)空值的判断
– 对DataFrame类型数据中是否存在空值进行判断,执行过程如下:
import pandas as pd
import numpy as np
dates=np.arange(20210101,20210105)
df7=pd.DataFrame(np.arange(12).reshape(4,3),index=dates,columns=['A','B','C'])
df8=pd.DataFrame(df7,index=dates,columns=['A','B','C','D','E'])
df8['D']=pd.Series(np.arange(3),index=dates[1:])
df8['E']=pd.Series(np.arange(4,7),index=dates[:3]) #构造一个含有控制的DataFrame类型数据df8
print(df8)
执行结果为:
A B C D E
20210101 0 1 2 NaN 4.0
20210102 3 4 5 0.0 5.0
20210103 6 7 8 1.0 6.0
20210104 9 10 11 2.0 NaN
result1=df8.isnull() #判断df8中是否有缺失数据,若有,则返回值为True,否则,返回值为False
print(result1)
执行结果为:
A B C D E
20210101 False False False True False
20210102 False False False False False
20210103 False False False False False
20210104 False False False False True
result2=np.any(df8.isnull()) #当df8中存在一个或多个空值的时候即返回True,若不存在空值则返回False
print(result2)
执行结果为:
True
result3=np.all(df8.isnull()) #当df8中的数据全部位空值时,返回为True,否则,返回为False
print(result3)
执行结果为:
False
(2)空值的处理
– 若数据中存在空值,则可以直接丢弃或者使用其他值进行填空,主要的操作如下:
result4=df8.dropna(axis=0,how="any") #将df8中存在缺失数据的行或列直接丢弃,
其中axis=0,表示行,axis=1,表示列;how="any"表示存在任意一个
或多个缺失值,how="all"表示全部为缺失值
print(result4)
执行结果为:
A B C D E
20210102 3 4 5 0.0 5.0
20210103 6 7 8 1.0 6.0
result5=df8.dropna(axis=1,how="all") #若df8中存在某列的数据全部位缺失值,则将该列丢弃
print(result5)
执行结果为:
A B C D E
20210101 0 1 2 NaN 4.0
20210102 3 4 5 0.0 5.0
20210103 6 7 8 1.0 6.0
20210104 9 10 11 2.0 NaN
result7=df8.fillna(method='pad',axis=1) #使用缺失值的前一个值进行填补,axis=0表示使用前一行非缺失
值进行填补;axis=1,表示使用前一列进行非缺失值填补
print(result7)
执行结果为:
A B C D E
20210101 0.0 1.0 2.0 2.0 4.0
20210102 3.0 4.0 5.0 0.0 5.0
20210103 6.0 7.0 8.0 1.0 6.0
20210104 9.0 10.0 11.0 2.0 2.0
result8=df8.fillna(method='backfill',axis=0) #使用缺失值的后一个值进行填补,axis=0表示使用后一行
的非缺失值进行填补,axis=1,表示使用后一列的非缺失
值进行填补
print(result8)
执行结果为:
A B C D E
20210101 0 1 2 0.0 4.0
20210102 3 4 5 0.0 5.0
20210103 6 7 8 1.0 6.0
20210104 9 10 11 2.0 NaN
file=pd.read_excel('E:\学习\python\DataEvaluateCode\student.xlsx',sheet_name='Sheet2') #从excel中读取数据,读取到Python中为DataFrame类型,其中sheet_name用来指定想要打开的excel中的sheet的名字
print(file)
执行结果为:
序号 学号 姓名 成绩
0 1 101 张三 95
1 2 102 李四 80
2 3 103 王五 78
file.to_csv('E:\学习\python\DataEvaluateCode\student2.csv',encoding='gbk') #将DataFrame类型数据写入到excel文件中
数据的合并操作如下:
data1=pd.DataFrame(np.arange(12).reshape(4,3),columns=['a','c','d'])
data2=pd.DataFrame(np.arange(12,24).reshape(3,4),columns=['a','b','c','d'])
print(data1)
执行结果为:
a c d
0 0 1 2
1 3 4 5
2 6 7 8
3 9 10 11
print(data2)
执行结果为:
a b c d
0 12 13 14 15
1 16 17 18 19
2 20 21 22 23
df9=pd.concat([data1,data2],axis=0,ignore_index=True) #将data1与data2进行纵向合并(axis=0表示纵向,axis=1表示横向),ignore_index=True表示行索引重新取值
print(df9)
执行结果为:
a c d b
0 0 1 2 NaN
1 3 4 5 NaN
2 6 7 8 NaN
3 9 10 11 NaN
4 12 14 15 13.0
5 16 18 19 17.0
6 20 22 23 21.0
df10=pd.concat([data1,data2],axis=1) #将data1与data2进行横向合并,缺少的部分使用NaN填充
print(df10)
执行结果为:
a c d a b c d
0 0 1 2 12.0 13.0 14.0 15.0
1 3 4 5 16.0 17.0 18.0 19.0
2 6 7 8 20.0 21.0 22.0 23.0
3 9 10 11 NaN NaN NaN NaN
df11=pd.concat([data1,data2],join='inner',axis=0,ignore_index=True) #纵向合并,只合data1与data2中共有的列,默认join="outer",即缺少的部分填充NaN
print(df11)
执行结果为:
a c d
0 0 1 2
1 3 4 5
2 6 7 8
3 9 10 11
4 12 14 15
5 16 18 19
6 20 22 23
Original: https://blog.csdn.net/seuliuyu/article/details/117731663
Author: littleyu111
Title: Pandas库的使用
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/755489/
转载文章受原作者版权保护。转载请注明原作者出处!