人生苦短

记录大学,记录生活,天道殷勤,请多关注!

人生苦短,我用Python!
大数据、机器学习、深度学习
  menu

pands数据框(DataFrame)

数据框指含有至少两个字段(或者序列)的数据集,数据框实际就是一个数据集 ; 数据集的行代表每一条观测,列代表各个变量。

一、创建数据框:
1.通过嵌套元组或者嵌套列表创建:

df1 = pd.DataFrame([['张三',20,'男'],['李四',52,'男'],['小米','20','女']])
print('通过嵌套元组或者列表创建数据框:\n',df1)
#索引默认为数字,当然可以自定义索引
df11 = pd.DataFrame([['张三',20,'男'],['李四',52,'男'],['小米','20','女']],index=['first','second','third'])

2.二维数组创建:

df2 = pd.DataFrame(np.array([['张三',20,'男'],['李四',52,'男'],['小米','20','女']]))
print('通过二维数组构造数据框:\n',df2)
#索引默认为数字,当然可以自定义索引:
df22 = pd.DataFrame(np.array([['张三',20,'男'],['李四',52,'男'],['小米','20','女']]),index=['first','second','third'])

3.通过字典创建:

df3 = pd.DataFrame({'姓名':['张三','李四','小米'],'age':[20,52,20],'性别':['男','男','女']})
print('通过字典形式创建DataFrame:\n',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,'\n')
    print('df_new中的列名对应的值:  \n',df_new[cname])

(2)遍历行:

#第一种方法
#df_new的index属性返回从0开始的行下标索引
for rindex in df_new.index:
    print('现在是第',rindex,'行')
    print('这一行的内容是:\n',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)


标题:pands数据框(DataFrame)
作者:chenruhai
地址:http://www.love520.ltd/articles/2019/08/03/1564796133551.html
CSDN博客地址:https://blog.csdn.net/qq_42658739
GitHub地址:https://github.com/chenruhai

评论