Python.DataFrame基础与应⽤
Python.DataFrame基础与应⽤
$1$PandasSeries数据应⽤
$2$概述
$6$Series结构,也称Series序列,是Pandas常⽤的数据结构之⼀,它是⼀种类似于⼀维数组的结构,由⼀组数据值(value)和⼀组标签组成,其中标签与数据值之间是⼀⼀对应的关系。
$6$Series可以保存任何数据类型,⽐如整数、字符串、浮点数、Python对象等,它的标签默认为整数,从0开始依次递增。Series的结构图,如下所⽰:即通过标签我们可以更加直观地查看数据所在的索引位置。
$2$创建Serise对象
$1$DataFrame数据应⽤
$2$概述
$6$DataFrame是⼀个表格型的数据结构,既有⾏标签(index),⼜有列标签(columns),它也被称异构数据表,所谓异构,指的是表格中每列的数据类型可以不同,⽐如可以是字符串、整型或者浮点型等。其结构
$6$DataFrame的每⼀⾏数据都可以看成⼀个Series结构,只不过,DataFrame为这些⾏中每个数据值增加了⼀个列标签。因此DataFrame其实是从Series的基础上演变⽽来。在数据分析任务中DataFrame的应⽤⾮常$2$创建DataFrame对象
$3$.基本语法
$6$基本语法如下表
importPandasaspd#导⼊Pandas库
pd.DataFrame(data,index,columns,dtype,copy)
$6$其参数解析如下:
$7$data:输⼊的数据,可以是ndarray[1],series,list,dict,标量或⼀个DataFrame。
$7$index:⾏标签,如果没有传递index值,则默认⾏标签是np.arange(n),n代表data的元素个数。
$7$columns:列标签,如果没有传递columns值,则默认列标签是np.arange(n)。
$7$dtype:dtype表⽰强制转换每⼀列的数据类型。其可能的数据类型为numpy所⽀持的数据类型(dtype对象通过numpy模块中的dtype()函数),具体如下表所⽰:
序号数据类型语⾔描述
1bool_布尔型数据类型(True或者False)
2int_默认整数类型,类似于C语⾔中的long,取值为int32或int64
3intc和C语⾔的int类型⼀样,⼀般是int32或int64
4intp⽤于索引的整数类型(类似于C的ssize_t,通常为 int32或int64)
5int8代表与1字节相同的8位整数。值的范围是-128到127。
6int16代表2字节(16位)的整数。范围是-32768⾄32767。
7int32代表4字节(32位)整数。范围是-2147483648⾄2147483647。
8int64表⽰8字节(64位)整数。范围是-9223372036854775808⾄9223372036854775807。
9uint8代表1字节(8位)⽆符号整数。
10uint162字节(16位)⽆符号整数。
11uint324字节(32位)的⽆符号整数。
12uint648字节(64位)的⽆符号整数。
13float_float64类型的简写。
14float16半精度浮点数,包括:1个符号位,5个指数位,10个尾数位。
15float32单精度浮点数,包括:1个符号位,8个指数位,23个尾数位。
16float64双精度浮点数,包括:1个符号位,11个指数位,52个尾数位。
17complex_复数类型,与complex128类型相同。
18complex64表⽰实部和虚部共享32位的复数。
19complex128表⽰实部和虚部共享64位的复数。
20str_表⽰字符串类型
21string_表⽰字节串类型
$7$copy:默认为False,表⽰复制数据data。
$3$.dtype数据类型对象
$6$数据类型对象(DataTypeObject)⼜称dtype对象,主要⽤来描述数组元素的数据类型、⼤⼩以及
字节顺序。同时,它也可以⽤来创建结构化数据。⽐如常见的int64、float32都是dtype对象的实例,其语法格式如下importnumpyasnp
np.dtype(object)#如np.dtype(np.int64)
$3$.创建空的DataFame对象
$6$⽰例如下:
$6$importpandasaspd
df=pd.DataFrame()
print(df)
$6$运⾏结果如下:
EmptyDataFrame
Columns:[]
Index:[]
$3$.列表创建DataFame对象
$6$可通过列表来创建DataFrame对象,⽰例如下:
importpandasaspd
importnumpyasnp
data1=[["A1","B1","C1"],["A2","B2","C2"],["A3","B3","C3"]]
index1=[1,2,3]
column1=["序号","名称","备注"]
dtype1=float
dataFrame1=pd.DataFrame(data1,index=index1,columns=column1)
print(dataFrame1)
$6$其结果为:
序号名称备注
1A1B1C1
2A2B2C2
3A3B3C3
$6$其要点有:
$7$data参数中列表的每⼀个元素为每⼀列。
$7$index参数和columns参数的个数应与data参数的⾏、列的数量相⼀致
$3$.列表嵌套字典创建
$6$data字典中,键对应的值的元素长度必须相同(也就是列表长度相同)。如果传递了索引,那么索引的长度应该等于数组的长度;如果没有传递索引,那么默认情况下,索引将是range(n),其中n代表数组长度。⽰importpandasaspd
data=[{'a':1,'b':2},{'a':5,'b':10,'c':20}]
df1=pd.DataFrame(data,index=['first','second'],columns=['a','b'])
df2=pd.DataFrame(data,index=['first','second'],columns=['a','b1'])
print(df1)
print(df2)
其结果为:
ab
first12
second510
ab1
first1NaN
second5NaN
$6$注意:
$7$与列表创建时不同,index参数和columns参数的个数应⼤于与data参数的⾏、列的数量。
$7$因为b1在字典键中不存在,所以对应值为NaN。
$3$.字典嵌套列表创建
$2$DataFrame访问与操作
$3$.列标签访问
$6$使⽤类似切⽚的语法通过⾏、列索引来等访问相应的⾏、列元素,如:
importpandasaspd
d={'one':pd.Series([1,2,3],index=['a','b','c']),
'two':pd.Series([1,2,3,4],index=['a','b','c','d'])}
df=pd.DataFrame(d)
print(df['one'])
$6$其结果为:
a1.0
b2.0
c3.0
dNaN
Name:one,dtype:float64
$3$.列索引添加、删除数据列
$6$使⽤columns列索引表标签可以实现添加新的数据列,常见两种⽅法:$7$使⽤了DataFrame的算术运算,这和NumPy⾮常相似。⽰例如下:importpandasaspd
d={'one':pd.Series([1,2,3],index=['a','b','c']),
'two':pd.Series([1,2,3,4],index=['a','b','c','d'])}
df=pd.DataFrame(d)
#使⽤df['列']=值,插⼊新的数据列
print(”使⽤列索引创建新数据列:”)
df['three']=pd.Series([10,20,30],index=['a','b','c'])
print(df)
#将已经存在的数据列做相加运
print(”已存在的数据列做算术运算:”)
df['four']=df['one']+df['three']
print(df)
其运⾏结果如下:
#使⽤列索引创建新数据列:
onetwothree
a1.0110.0
b2.0220.0
c3.0330.0
dNaN4NaN
#已存在的数据列做算术运算:
onetwothreefour
a1.0110.011.0
b2.0220.022.0
c3.0330.033.0
dNaN4NaNNaN
$7$还可以使⽤insert()⽅法插⼊新的列,⽰例如下:importpandasaspd
info=[['Jack',18],['Helen',19],['John',17]]
df=pd.DataFrame(info,columns=['name','age'])
print(df)
#注意是column参数
#数值1代表插⼊到columns列表的索引位置
df.insert(1,column='score',value=[91,90,75])
print(df)
#其输出结果如下:
#添加前:
nameage
0Jack18
1Helen19
2John17
#添加后:
namescoreage
0Jack9118
1Helen9019
2John7517
$7$通过del和pop()都能够删除DataFrame中的数据列。⽰例如下:
d={'one':pd.Series([1,2,3],index=['a','b','c']),
'two':pd.Series([1,2,3,4],index=['a','b','c','d']),
'three':pd.Series([10,20,30],index=['a','b','c'])}
df=pd.DataFrame(d)
print("Ourdataframeis:")
print(df)
#使⽤del删除
deldf['one']
print(df)
#使⽤pop⽅法删除
df.pop('two')
print(df)
其输出结果如下:
原DataFrame:
onethreetwo
a1.010.01
b2.020.02
c3.030.03
dNaNNaN4
使⽤del删除first:
threetwo
a10.01
b20.02
c30.03
dNaN4
使⽤pop()删除:
three
a10.0
b20.0
c30.0
dNaN
$3$.⾏标签访问(提取)
$4$loc函数
$6$列标签访问与上⽂1.3.1相似。同时,还可使⽤loc()函数来访问。⽰例如下:>>>importpandasaspd
>>>importnumpyasnp
>>>ad_excel(r'D:/myExcel/1.xlsx',index_col='id')
>>>df
namescoregrade
id
abog45A
cjiken67B
dbob23A
bjiken34B
flucy98A
etidy75B
#指定⾏标'a'以及'f'⾏,第⼆个参数省略,则获取整⾏
>>>df.loc[['a','f']]
idnamescoregrade
abog45A
flucy98A
#以切⽚形式传⼊,会按照df中的顺序获取
#此处需要注意,并不是只获取'a','b'⾏
#在df中'a','b'两⾏中还包含'c','d'⾏
#会⼀并获取
namescoregrade
id
abog45A
cjiken67B
dbob23A
bjiken34B
#以切⽚传⼊⾏标,以列表形式传⼊列标
>>>df.loc['a':'f',['name','grade']]
namegrade
id
abogA
cjikenB
dbobA
bjikenB
flucyA
#单个字符串获取指定数据
index复数>>>df.loc['a','name']
'bog'
#获取整列数据
>>>df.loc[:,['name','grade']]
namegrade
id
abogA
cjikenB
dbobA
bjikenB
flucyA
etidyB
$6$注意:
$7$loc允许接两个参数分别是⾏和列,当列标省略时,默认获取整⾏数据。两个参数都可以以字符,切⽚以及列表的形式传⼊。$7$第⼆个参数省略,则获取整⾏。
$7$参数之间需要使⽤“逗号”隔开,但该函数只能接收标签索引。
$7$以切⽚形式传⼊,会按照df中的顺序获取
$7$loc后接中括号。
$4$iloc函数
$6$通过将数据⾏所在的索引位置传递给iloc函数,也可以实现数据⾏选取。⽰例如下:
importpandasaspd
importnumpyasnp
data1=[["A1","B1","C1"],["A2","B2","C2"],["A3","B3","C3"]]
index1=[1,2,3]
column1=["序号","名称","备注"]
dtype1=float
dataFrame1=pd.DataFrame(data1,index=index1,columns=column1)
print(dataFrame1)
df=dataFrame1.iloc[[0,2],[1,2]]
print(df)
运⾏结果如下:
名称备注
1B1C1
3B3C3
$6$注意:
$7$iloc允许接受两个参数分别是⾏和列,参数之间使⽤“逗号”隔开
$7$该函数只能接收整数索引,第⼀个值从0开始。
$4$append函数添加⾏
$6$使⽤append()函数,可以将新的数据⾏添加到DataFrame中,该函数会在⾏末追加数据⾏。其⽰例为:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。