【20天搞定数据分析】第七天:DataFrame的创建和基本操作
千锋python
2021年05月15日 19:14
收录于文集
共20篇

【千锋教育干货暴击】

如果你想更好的学习Python乃至转行,弯道超车,快人一步!本课程零基础即可加入学习,抓住大数据、机器学习、人工智能时代的红利,开启你的第一行代码吧!

   ↓    ↓    ↓

千锋教育Python教程_700集零基础Python入门到精通教程(保姆级新手教程)​

千锋教育Python教程全套_python零基础入门到精通(学完可达到Python工程师水平)​


前面我们介绍了Series知道它是类似于一维数组的对象,由一组数据以及之相关的数据标签(即索引)组成。

今天介绍的DataFrame它是Pandas中的一个表格型的数据结构(即类似excel的二维表),包含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型等),而且DataFrame即有行索引也有列索引。

DataFrame的创建

DataFrame的创建方式有如下几种:

通过等⻓列表创建

代码块
JavaScript
自动换行
复制代码
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属性

代码块
JavaScript
自动换行
复制代码
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,同时设置行或者列索引,但是要根据自己的需求来定,可以如下:

代码块
JavaScript
自动换行
复制代码
df=pd.DataFrame(np.random.randn(4,6),index=list('ABCD'),columns=list('123456'))
df
复制成功

结果:

但是要注意index和columns后面设置的索引要与数组的shape保持一致才可以,否则报错。

通过字典创建

通过字典创建就轻松很多,字典的数据可以来自爬虫,将爬取的各种数据保存成DataFrame的格式,便于日后的数据分析。假设我们有一组persons数据为字典格式:

代码块
JavaScript
自动换行
复制代码
persons={'name':['小花','狗蛋','二狗','小草'],'age':[17,20,30,20],'gender':['女','男','男','女']}
df=pd.DataFrame(dic1)
df
复制成功

输出结果:

读取数据文件创建

如果你的数据在某个excel或者csv,又或者在数据库中,我们可以通过读取这些数据,转成DataFrame对象。

代码块
JavaScript
自动换行
复制代码
pd.read_csv(filepath_or_buffer,header,parse_dates,index_col) 参数:
filepath_or_buffer:字符串,或者任何对象的read()方法。这个字符串可以是URL,有效的URL方案包括http、ftp、s3和文件。可以直接写入"文件名.csv"
header:将行号用作列名,且是数据的开头。注意当skip_blank_lines=True时,这个参数忽略注释行和空行。所以header=0表示第一行是数据而不是文件的第一行。
默认header=0(即第一行,索引从0开始)为列索引
复制成功

代码块
JavaScript
自动换行
复制代码
# 作用:将csv文件读入并转化为DataFrame对象。
pd.read_csv('douyin.csv')
复制成功

输出结果:

代码块
JavaScript
自动换行
复制代码
# 使用方法通过read_csv()
pd.read_excel('阿里巴巴2017年股票数据.xlsx')
复制成功

输出结果:

当然也可以连接数据库完成数据的DataFrame加载

代码块
JavaScript
自动换行
复制代码
步骤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对象的常用操作

常用的属性有:

代码块
JavaScript
自动换行
复制代码
index:返回df的索引,即行标签
columns:返回df的列名,即列标签
df.dtypes:返回df每一列的数据类型
df.values:以numpy的形式返回df中的值
复制成功

常用操作有:

同理df.notna() 检测没有缺失值,与df.isna()相反,就不演示了。