pandas的数据结构的介绍
1.Series 对象的创建
- Series是一种一维的数组型对象,它包含了一个值序列(values),并且包含了数据标签,称为索引(index)
pd.Series(data=None,index=None,dtype=None,name=None,copy=False)
● data:创建数组的数据,可为array-like, dict, or scalar value
● index:指定索引
● dtype:数组数据类型
● name:数组名称
● copy:是否拷贝
-
1.可以通过列表,元组,数组,字典来进行创建
-
列表创建
import pandas as pd
import numpy as np
df1 = pd.Series([0,1,2,3])
df1
- 元组创建
df1 = pd.Series((0,1,2,3,4,55))
df1
- 数组创建
- 这里我们可以看到数组创建的数据类型是int32
df2 = pd.Series(np.arange(20))
df2
olor_FFFFFF,t_70,g_se,x_16)
- 字典创建
df3 = pd.Series({'name':'li', 'sex': '女','age': '22'})
df3
2.指定索引
1.我们可以指定列的索引为10-29
df2 = pd.Series(np.arange(20),index=list(range(10,30)))
df2
2.也可以指定索引为字符串
pd.Series([1,2,3,4,5],index=list("abcde"))
3.修改Series对象的类型
- 从整型变为了浮点型
df1 = pd.Series((0,1,2,3,4,55),dtype="float")
df1
4.添加表的名称
df1 = pd.Series((0,1,2,3,4,55),dtype="float",name="data_name")
df1
5.查看表中所有数据
当我们不能把表查看完全的时候我们可以使用以下代码,但是不建议使用
#显示所有列
pd.set_option('display.max_columns', None)
#显示所有行
pd.set_option('display.max_rows', None)
#设置value的显示长度为100,默认为50
pd.set_option('max_colwidth',100)
6.Series对象函数的运用
-
1.查看数据类型
df2.dtype -
2.修改数据类型
df2.astype(‘float’) -
3.预览数据前5条和后五条
df2.head() 和 df2.tail(5) -
4.查看索引
df2.index -
5.查看值序列
df2.values -
6.重置索引
df2.reset_index(drop=False) # 重置索引
○ drop # 是否删除原索引 默认为否 -
7.检查是否为空
df2.isnull()
- 8.检查不是缺失值
df2.notnull()
2.DataFrame对象的创建
- DataFrame表示的是矩阵的数据表,它包含已排序的列集合,每一列可以是不同的值类型(数值,字符串,布尔值)。在DataFrame中,数据被存储为一个以上的二维块。
pd.DataFrame(data=None,index=None,columns=None,dtype=None,copy=False)
● data:创建数组的数据,可为ndarray, dict
● index:指定索引
● dtype:数组数据类型
● copy:是否拷贝
1.DataFrame对象可以通过字典,列表,字典里面嵌套字典,以及Series组成的字典来进行创建DataFrame对象
- 字典创建
import pandas as pd
data = {
'a':[1,2,3],
'b':(4,5,6),
'c':np.arange(7,10)
}
b = pd.DataFrame(data)
b
- 列表创建
- 列表里面嵌套字典
d = pd.DataFrame([{'a':'b','v':3},
{'a':1,'n':32},
{'a':6,'m':99}])
d
- Series组成的字典创建
df1 = pd.DataFrame({
'a':pd.Series(np.arange(5)),
'b':pd.Series(np.array((8,9,7,5,55)))
})
- 字典里面嵌套字典创建
df2 = pd.DataFrame({
'a':{'b':1},
'v':{'f':'s'}
})
2.指定索引
- 行索引
df2.index
- 列索引
df2.columns
- 把DataFrame表格型数据结构变成二维数组
df2.values
- 转置(行变成列,列变成行)
df1.T
- DataFrame基础操作
● df.shape # 查看数组形状,返回值为元组
● df.dtypes # 查看列数据类型
● df.ndim # 数据维度,返回为整数
● df.index # 行索引
● df.columns # 列索引
● df.values # 值
● d.head(n) # 显示头部几行,默认前5行
● d.tail(n) # 显示末尾几行,默认后5行
● d.info() # 相关信息概述
3.Series 和 DataFrame的切片操作
1.Series增数据
- 原数组
第一种:
s['m']=999
s
第二种:
a = s.append(pd.Series({'ly':'520'}))
a
2.Series删数据
1.把 c 的一行给删除(在原数组上操作,改变原数组)
del a['c']
a
2.把 f 的一行给删除不改变原数组
c = a.drop('f')
c
1.DataFrame增数据
- 原表格数据
df3 = pd.DataFrame({
'a':pd.Series(np.arange(5)),
'b':pd.Series(np.array((8,9,7,5,55))),
'c':[8,2,44,22,55]
})
df3
1.DataFrame对象增数据
- 1.增加列
第一种:增加一列全是99(最后一列)
df3['d']=99
df3
第二种: 指定位置增加一列
在第二列增加一列
df3.insert(1,'E',[1,2,33,44,55])
df3
- 2.增加行
1.增加一行都是88
df3.loc['ly']=88
df3
2.增加一行a对应2222,c对应的8888,其余没有的都为NaN
添加这个参数是忽略原有的索引 , 才不会报错 ignore_index=True
不会改变原数组
df4 = df3.append({'a':2222,'c':8888},ignore_index=True)
df4
2.DataFrame对象删数据
- 1.删除列
1.在原数组上删除‘d’这一列
del df4['d']
2.不改变原数组删除E和a这俩列
df4.drop(['E','a'],axis=1)
- 2.删除行
删除第一行和第五行(不改变原数组)
df4.drop([1,5],axis=0)
删除第一行到第五行i (nplace=True改变原数组)
df4.drop([i for i in range(0,4)],inplace=True)
3.DataFrame对象查数据
- 1.查找第a列
df4.a
df4['a']
df4.loc[:,'a']
-
df4[[‘a’ ]] 可以以dataFrame对象的形式取出来
-
2.查找第1行
df4.iloc[1]
df4.loc[1]
- 3.查找第2-5行
df4.iloc[2:6]
- 3.查找第三行第三列数据
df4.iloc[2:3,2:3]
- 4.查找前三列
df4.loc[:,df4.columns[:3]]
4.Series 和 DataFrame的重新索引
1.Series重新索引
- 原数组
a = pd.Series([1,2,3,4,5],index=list("abcde"))
a
a.reindex(['e','b','a','c','d'])
- 2.Series重新命名
a.rename({'a':2,'c':55})
2.DataFrame重新索引
-
原数组
-
1.列重新索引(相当于重新排序如果重新弄得索引没有的话,会输出NaN)
df4.reindex(columns=['b','c','a','E'])
- 2.行重新索引
把第五行和第六行重新排序
df4.reindex([0,1,2,3,5,4,6],axis=0)
- 1.列重新命名
不改变原数组
df4.rename({'a':'A','E':'B','b':'C','c':'D'},axis=1)
- 2.行重新命名
我们只需要把 axis改为0即可
df4.rename({0:'A',1:'B',2:'C',5:'D'},axis=0)
- 3.生成新的所有序列(drop = True)不要原来的序列,可以加上这个参数
df4.reset_index()