引入
Pandas是一个基于Python构建的专门进行数据操作和分析的开源软件库,可提供数据结构和运算,进行功能现强大、灵活且易于使用的数据分析和操作。
Pandas 为热门编程语言赋予了处理类似电子表格的数据的能力,从而增强了Python功能,除其他关键功能外,加快了加载、对齐、操作和合并的速度。
在此记录基础用法,方便查阅。
使用
1.数据结构
1.1 Series
Pandas Series 类似表格中的一个列(column),类似于一维数组,可以保存任何数据类型。
使用时类似于字典
import pandas as pd
pd.Series( data, index, dtype, name, copy)
#data:一组数据(ndarray 类型 来自numpy),也可以直接使用列表
#index:数据索引标签(也是列表),如果不指定,默认从 0 开始自动填充索引
#dtype:数据类型,默认会自己判断
#name:设置名称。
#copy:拷贝数据,默认为 False。
1.1.1 使用列表构建Series
data = [123, 223, "Wiki"]
foo = pd.Series(data, index = ["x", "y", "z"])
#x 123
#y 223
#z Wiki
#dtype: object
1.1.2 使用字典构建Series
此时字典的键会成为Series的索引
若又指定了index参数那么Series只会取字典中index列表对应的键,不存在时为NaN
dic = {'a':np.nan, 'b':123, 'c':333}
bar = pd.Series(dic, index = ['a', 'b', 1 , 2])
#a NaN
#b 123.0
#1 NaN
#2 NaN
#dtype: float64
1.2 DataFrame
DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。
DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)。
pandas.DataFrame( data, index, columns, dtype, copy)
#data:一组数据(ndarray、series, map, lists, dict 等类型)。
#index:索引值,或者称为行标签。
#columns:列标签,默认为 RangeIndex (0, 1, 2, …, n) 。
#dtype:数据类型。
#copy:拷贝数据,默认为 False。
1.2.1 使用二维列表构建
data = [['Google',10],['Runoob',12],['Wiki',13]]
df = pd.DataFrame(data, index=['a', 'b', 'c'] ,columns=['Site','Age'])
得到结果如下
| Site | Age | |
|---|---|---|
| a | 10 | |
| b | Runoob | 12 |
| c | Wiki | 13 |
1.2.2 使用包含字典的列表构建
列表中所有字典的键都会变成列标签
data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data)
| a | b | c | |
|---|---|---|---|
| x | 1 | 2 | NaN |
| y | 5 | 10 | 20.0 |
1.2.3使用以列表为值的字典构造
data = {
'a':[1,2,3],
'b':[11,22,33]
}
df = pd.DataFrame(data, index=['x', 'y', 'z'])
| a | b | |
|---|---|---|
| x | 1 | 11 |
| y | 2 | 22 |
| z | 3 | 33 |
2.获取数据
2.1 Series
对于Series,比较简单,类似于字典
data = [123, 223, "Wiki"]
foo = pd.Series(data, index = ["x", "y", "z"])
element = foo['x'] # 123
2.2 DataFrame
对于DataFrame, 有行列之别
data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data, index=['x', 'y'])
col = df['a'] #获取列 Series类型
# 注意!这个是[]运算符!!
row = df.loc['x'] #获取行 Series类型
#loc即location
df2 = df[['b', 'c']] #取两列生成新DataFrame
df3 = df.loc[['x', 'y']] # 取两行生成新DataFrame
2.3 基本方法
df.head(n) #返回前n行 n默认为5
df.tail(n) #最后n行,默认为5
df.info() #返回表格的信息
3.读取文件
支持读取很多类型文件,参考官方文档
方法的其他参数,参考博客
仅列举最简单的几种:
- csv
# 使用数据
df = pd.read_csv('nba.csv')
# 使用io流
with open('nba.csv') as f:
df = pd.read_csv(f)
#甚至使用网络链接
df = pd.read_csv('https://static.runoob.com/download/nba.csv')
-
json
同上,和python中赋值再构造DataFrame基本一致
-
excel
同上,但是注意:
panda读取excel时需要调用xlrd(.xls)或者openpyxl(.xlsx),需要提前安装相应库。
3. 数据清洗
3.1 清洗空值
3.1.1 isnull方法
Series.isnull()会检测该Series的所有值是否为NA,返回bool的Series
3.1.2 dropna方法
如果我们要删除包含空字段的行,可以使用 dropna() 方法
注意DataFrame或者Series都可以使用这个
语法格式如下:
DataFrameOrSeries.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
- axis:默认为 0,表示逢空值剔除整行,如果设置参数 axis=1 表示逢空值去掉整列。
- how:默认为 'any' 如果一行(或一列)里任何一个数据有出现 NA 就去掉整行,如果设置
how='all'一行(或列)都是NA才去掉这整行。 - thresh:设置需要多少非空值的数据才可以保留下来的。
- subset:设置想要检查的列。如果是多个列,可以使用列名的 list 作为参数。
- inplace:默认情况下,
dropna()方法返回一个新的DataFrame,不会修改源数据。inplace=True时会修改源数据
3.1.3 fillna方法
第一个参数是遇到NA时填充的值,其他参数同上
常常使用列的均值、中位数值或众数来填充,分别使用
mean()、median() 和 mode() 来计算值然后再用fillna填充
还有更高级填充方式,需要时看文档
'bfill'就是将缺失值按照后面一个值进行填充。
'ffill'就是将缺失值按照前面一个值进行填充。
这里的前、后一个数值默认是纵向看的
如果需要使用左或者右边的数值进行填充,只需要加参数axis=1,就可以了。