Pandas--学习记录一
为了使用 Pandas,我们首先需要导入库
import pandas as pd
一、创建、读取
1.创建
主要有两种类型:DataFrame 和Series.
DataFrame:一个表格,包括每条记录的各个属性值。每一个记录对应着一行一列
pd.DataFrame({'Yes':[50, 21], 'No':[131, 2]})
或者
pd.DataFrame([[50, 131], [21, 2]], columns=['Yes', 'No'])
DataFrame的内容不局限于整数形数据,也可以是字符串
pd.DataFrame({'Bob': ['I liked it.', 'It was awful.'], 'Sue': ['Pretty good.', 'Bland.']})
我们使用 pd.DataFrame() 创建 DataFrame类型的数据,其中行标签的列表称为 Index,我们可以设置索引参数。
pd.DataFrame({'Bob': ['I liked it.', 'It was awful.'],
'Sue': ['Pretty good.', 'Bland.']},
index=['Product A', 'Product B'])
Series:是数值序列,如果说DataFrame是表格,那Series就是一个列表,它的创建方式与Python中没有什么不同
pd.Series([1, 2, 3, 4, 5])
Series 实际上是 DataFrame的一个列。所以我们可以采用之前的方式使用索引从行标签中获取值,但是Series没有列名,只有一个总的名字。
pd.Series([30, 35, 40], index=['2015 Scales', '2016 Scales', '2017 Scales'], name='Products A')
2.读取数据
最基本的是读取 CSV 表格,通过逗号划分表格的值:
Product A,Product B,Product C,
30,21,9,
35,34,1,
41,11,11
wines_reviews = pd.read_csv("文件地址")
我们可以使用 shape属性查看DataFrame的大小
wines_reviews.shape
使用 **head()**查看前五行信息
wines_reviews.head()
二、索引,选取
根据 DataFrame 的属性选取
reviews.country
第二种方法:
reviews['country']
这两种方法都能从 DataFrame 中选择一个特定的Series,但是 [ ] 可以处理特殊的列名(如:country providence列,但是reviews.country providence会报错)
我们可以类似字典取值的方法获取 DataFrame 的值:
reviews['country'][0]
1.Pandas中的索引
常用的两种方法 loc 和 iloc,顺序先行后列,与原始python中先列后行有所不同。
基于索引 iloc
获取第一行信息:
reviews.iloc[0]
获取第一列信息:
reviews.iloc[:, 0]
获取前三行的第一列信息:
reviews.iloc[:3, 0]
reviews.iloc[[0, 1, 2], 0]
获取后五行信息:
reviews.iloc[-5:]
基于标签 loc
获取 country 列第一行信息:
reviews.loc[0, 'country']
获取多列信息:
reviews.loc[:, ['taster_name', 'taster_twitter_handle', 'points']]
iloc 与 loc 的区别
两者在索引数值型表格时略有差别,iloc[0:10] 选取的是 0, 1, …, 9,而 loc[0:10] 选取的是 0, 1, …, 10
2.更改索引 set_index()
reviews.set_index('title')
此时第一列不再是 默认的数字行号,而是 title 中的内容
3.条件选取
涉及条件运算符参与索引
国家是否为 Italy ,结果返回 bool 数据类型
reviews.country == 'Italy'
通过条件运算符获取位置,然后索引数据
reviews.loc[reviews.country == 'Italy']
reviews.loc[(reviews.country == 'Italy') & (reviews.points >= 90)] # 与
reviews.loc[(reviews.country == 'Italy') | (reviews.points >= 90)] # 或
reviews.loc[reviews.country.isin(['Italy', 'France'])] # 存在
reviews.loc[reviews.price.notnull()] # 非空