前面我们介绍了Series知道它是类似于一维数组的对象,由一组数据以及之相关的数据标签(即索引)组成。今天介绍的**DataFrame**它是Pandas中的一个表格型的数据结构(即类似excel的**二维表**),包含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型等),而且DataFrame即有行索引也有列索引。
#### DataFrame的创建
DataFrame的创建方式有如下几种:
> 1. 通过等⻓列表创建
> 2. 通过Numpy数组创建
> 3. 通过字典创建
> 4. 读取数据文件创建
##### 通过等⻓列表创建
```
list1 = [[5,2,0,4],[2,3,4,5],[3,6,1,9],[4,1,0,8]]
df=pd.DataFrame(list1)
df
```
默认会添加上行和列的索引(都是从0开始的依次往下递增)
我们也可以设置索引值,通过index和columns属性
```
list1 = [[5,2,0,4],[2,3,4,5],[3,6,1,9],[4,1,0,8]]
df=pd.DataFrame(list1,index=list('1234'),columns=list('ABCD'))
df
```
则根据属性设置的索引展示
上面的方式适合数据量贼小,才这样创建。
##### 通过Numpy数组创建
比如我们需要创建一个随机数组成的4*6的DataFrame,同时设置行或者列索引,但是要根据自己的需求来定,可以如下:
```
df=pd.DataFrame(np.random.randn(4,6),index=list('ABCD'),columns=list('123456'))
df
```
结果:
但是要注意index和columns后面设置的索引要与数组的shape保持一致才可以,否则报错。
##### 通过字典创建
通过字典创建就轻松很多,字典的数据可以来自爬虫,将爬取的各种数据保存成DataFrame的格式,便于日后的数据分析。
假设我们有一组persons数据为字典格式:
```
persons={'name':['小花','狗蛋','二狗','小草'],'age':[17,20,30,20],'gender':['女','男','男','女']}
df=pd.DataFrame(dic1)
df
```
输出结果:
##### 读取数据文件创建
如果你的数据在某个excel或者csv,又或者在数据库中,我们可以通过读取这些数据,转成DataFrame对象。
> pd.read_csv(filepath_or_buffer,header,parse_dates,index_col)
> 参数:
>
> 1. filepath_or_buffer:
> 字符串,或者任何对象的read()方法。这个字符串可以是URL,有效的URL方案包括http、ftp、s3和文件。可以直接写入"文件名.csv"
>
> 2. header:
> 将行号用作列名,且是数据的开头。
> 注意当skip_blank_lines=True时,这个参数忽略注释行和空行。所以header=0表示第一行是数据而不是文件的第一行。
>
> 默认header=0(即第一行,索引从0开始)为列索引
```
# 作用:将csv文件读入并转化为DataFrame对象。
pd.read_csv('douyin.csv')
输出结果:
# 使用方法通过read_csv()
pd.read_excel('阿里巴巴2017年股票数据.xlsx')
```
输出结果:
当然也可以连接数据库完成数据的DataFrame加载
> 步骤1:创建连接对象,需要提前:pip install pymysql
>
> 其中user是你连接mysql数据库的用户名,password表示用户密码,database表示要连接的数据库名字,charset表示编码
>
> import pymysql
>
> con = pymysql.connect(host=localhost, user=username, password=password, database=dbname, charset=‘utf8’, use_unicode=True)
>
> 步骤2:定义sql语句
>
> sql_cmd = 'select * from 表名'
>
> df = pd.read_sql(sql_cmd, con)
#### DataFrame对象的常用操作
常用的属性有:
> index:返回df的索引,即行标签
>
> columns:返回df的列名,即列标签
>
> df.dtypes:返回df每一列的数据类型
>
> df.values:以numpy的形式返回df中的值
常用操作有:
> head() 使用head可以查看前几行的数据,默认的是前5行,不过也可以自己设置。
>
> tail(). 使用tail可以查看后几行的数据,默认也是5行,参数可以自己设置。
>
> astype(). 转换指定数据类型
>
> isna 检测缺失值
>
> notna 检测没有缺失值
>
> describe() 可以对数据根据列进行描述性统计,比如最大值,最小值等
同理df.notna() 检测没有缺失值,与df.isna()相反,就不演示了。
更多关于python培训的问题,欢迎咨询千锋教育在线名师。千锋教育拥有多年IT培训服务经验,采用全程面授高品质、高体验培养模式,拥有国内一体化教学管理及学员服务,助力更多学员实现高薪梦想。
注:本文部分文字和图片来源于网络,如有侵权,请联系删除。版权归原作者所有!