Python Pandas 基础用法

227 阅读4分钟

引入

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'])

得到结果如下

SiteAge
aGoogle10
bRunoob12
cWiki13

1.2.2 使用包含字典的列表构建

列表中所有字典的键都会变成列标签

 data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
 df = pd.DataFrame(data)
abc
x12NaN
y51020.0

1.2.3使用以列表为值的字典构造

 data = {
     'a':[1,2,3],
     'b':[11,22,33]
 }
 df = pd.DataFrame(data, index=['x', 'y', 'z'])
ab
x111
y222
z333

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.读取文件

支持读取很多类型文件,参考官方文档

方法的其他参数,参考博客

仅列举最简单的几种:

  1. 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')
  1. json

    同上,和python中赋值再构造DataFrame基本一致

  2. excel

    同上,但是注意:

    panda读取excel时需要调用xlrd(.xls)或者openpyxl(.xlsx),需要提前安装相应库。

3. 数据清洗

3.1 清洗空值

3.1.1 isnull方法

Series.isnull()会检测该Series的所有值是否为NA,返回boolSeries

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,就可以了。