数据框指含有至少两个字段(或者序列)的数据集,数据框实际就是一个数据集 ; 数据集的行代表每一条观测,列代表各个变量。
一、创建数据框:
1.通过嵌套元组或者嵌套列表创建:
df1 = pd.DataFrame([['张三',20,'男'],['李四',52,'男'],['小米','20','女']]) print('通过嵌套元组或者列表创建数据框: ',df1) #索引默认为数字,当然可以自定义索引 df11 = pd.DataFrame([['张三',20,'男'],['李四',52,'男'],['小米','20','女']],index=['first','second','third'])
2.二维数组创建:
df2 = pd.DataFrame(np.array([['张三',20,'男'],['李四',52,'男'],['小米','20','女']])) print('通过二维数组构造数据框: ',df2) #索引默认为数字,当然可以自定义索引: df22 = pd.DataFrame(np.array([['张三',20,'男'],['李四',52,'男'],['小米','20','女']]),index=['first','second','third'])
3.通过字典创建:
df3 = pd.DataFrame({'姓名':['张三','李四','小米'],'age':[20,52,20],'性别':['男','男','女']}) print('通过字典形式创建DataFrame: ',df3) #索引默认为数字,当然可以自定义索引: df33 = pd.DataFrame(data={'姓名':['张三','李四','小米'],'age':[20,52,20],'性别':['男','男','女']},index=['first','second','third']) #强烈推荐此方式
二、访问DataFrame:
1.按列访问(也就是按键访问值)
print(df3['age'])
2.按行访问:
print(df3[1:2]) #访问第二行(索引为1)
3.按行列号访问:
print(df3.iloc[0:2,0:1]) #访问的是第一第二行,第一列的内容
4.按行索引、列名访问:
print(df3.at['two','性别']) #访问行名(索引)为two,列名为性别内容
三、DataFrame表格修改:
1.修改列名:
df3.columns=['name','age','ssex'] #df.columns是用来获取df3的列名的,而且是按顺序排列的,然后直接进行在后面传入一个修改后的各个列名组成的列表 print(df3)
2.修改行索引:
#修改行索引 df3.index=[4,5,6] #这里的df3.index是获取行索引,然后在=号后面填入修改后的各个行索引构成的可迭代对象即可,range(n,m)也行,n、m属于起始和结束的数字。 print(df3)
3.数据的删除:pd.drop(行名/列名,axis=0/1)
drop函数并不会修改原数据,所以需要赋值给新的对象,如果要在原数据进行修改则要令参数inplace=true,(默认是flase)
#删除行 (这里删除行名为4的一行,axis=0代表从行进行删除的操作) df33 = df3.drop(4,axis=0) #删除列(删除列名为age的一列) df333=df3.drop("age",axis=1)
4.添加和插入:
(1).对列的添加和插入:(注意行数)
df3.insert(0,'城市',['南宁','钦州','广西']) #第一个参数是插入的位置,第二个参数是插入之后的列名是什么,第三个参数插入的内容。 print(df3) #在原数据上进行了修改 #当然也可以从其它文件或者其它对象传入数据进行添加和插入: data = list(df3['城市']) #insert的第三个参数传入的是list df2.insert(0,'city',data)
(2)对行的添加和插入:(注意列数)
快速插入一行:
#在原来的df2上进行了添加,直接添加
df2.loc['four'] = ['北京','可可',23,'女']
print(df2)
第二种方式,新建一个DataFrame,合并两个DataFrame
df4 = pd.DataFrame([['海南','阿克',20,'女']])
#print(df4)
df4.columns = df3.columns
#合并需要设置ignore_index=True,而且这种合并是合并到临时对象上的,也就是需要赋值给变量才能保存下来。
df_new = pd.concat([df3,df4],ignore_index=True)
print(df_new)
5、遍历数据:
(1)遍历列
#这里直接遍历的是df_new的列字段(列名) for cname in df_new: print('df_new的列名(字段名): ',cname,' ') print('df_new中的列名对应的值: ',df_new[cname])
(2)遍历行:
#第一种方法 #df_new的index属性返回从0开始的行下标索引 for rindex in df_new.index: print('现在是第',rindex,'行') print('这一行的内容是: ',df_new.loc[rindex]) #第二种方法(返回数组,每一行一个数组) #df_new的values属性直接返回多个数组组成的数组(复合数组也叫嵌套数组) for r in df_new.values: print(r)
(3)遍历行和列
#df_new.iterrows()返回一个类生成器,其实经过多次验证,这里的生成器生成的是由(行,列)组成的嵌套元组
for index,row in df_new.iterrows():
print('第',index,'行')
print(row)