pandas中最基础的数据结构叫做DataFrame,类似excel中的表结构,包含栏与列的集合,可根据栏与列操作数据,类似R的DataFrame。
下面来看一些基础操作,在数据清洗与处理阶段,这些操作需熟练掌握。
1.建立DataFrame
import pandas as pd
data = pd.DataFrame([['jerry','M',36],['emma','F',23],['tony','M',34]])
data
0 1 2
0 jerry M 36
1 emma F 23
2 tony M 34
增加字段名称
data.columns = (['name','gender','age'])
data
name gender age
0 jerry M 36
1 emma F 23
2 tony M 34
一般情况下,我们不会手动建立这种DataFrame,而是与数据库连接,直接将需要的数据导出转化为DataFrame,方便接下来的处 理。
rs = pd.DataFrame(result,columns=["account_id","state"])
2.取样前/后数笔资料
rs.head()
rs.tail()
3.取得DataFrame基本信息
- 取得基本描述
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 3 columns):
name 3 non-null object
gender 3 non-null object
age 3 non-null int64
dtypes: int64(1), object(2)
memory usage: 88.0+ bytes
- 取得基本统计
data.describe()
age
count 3.0
mean 31.0
std 7.0
min 23.0
25% 28.5
50% 34.0
75% 35.0
max 36.0
- 取得基本形态
data.dtypes
name object
gender object
age int64
dtype: object
- 取得行与列的数量
data.shape
(3, 3)
#增加一行,方便下面数量的演示
data.loc[4] = {'age':20,'gender':'M','name':'bob'}
name gender age
0 jerry M 36
1 emma F 23
2 tony M 34
4 bob M 20
#检查行数
data.shape[0]
4
#检查列数
data.shape[1]
3
- 查看DataFrame包含哪些列
data.columns
Index(['name', 'gender', 'age'], dtype='object')
4.存取与切割元素
- 对行操作
#选取最前面的元素,注意下标从0开始,三种方式可任选一种
data.iloc[1]
data.loc[1]
data.ix[1]
name jerry
gender M
age 36
Name: 0, dtype: object
#选取多行,注意不包含最后面的下标
data.iloc[1:3]
data.loc[1:3]
data.ix[1:3]
name gender age
1 emma F 23
2 tony M 34
- 对列操作
#选取特定的一列
data["name"]
0 jerry
1 emma
2 tony
4 bob
Name: name, dtype: object
#选取多列
data[["name","gender"]]
name gender
0 jerry M
1 emma F
2 tony M
4 bob M
- 选取满足特定行与列的数据
data.ix[1:2,['name','age']]
name age
1 emma 23
2 tony 34
data[data["age"] == 23]
#与条件
data[(data["gender"] == "M") & (data["age"] == 23)]
#或条件
data[(data["gender"] == "M") | (data["age"] == 23)]
5.新增与删除行与列
#增加列
data["employee"] = True
name gender age employee
0 jerry M 36 True
1 emma F 23 True
2 tony M 34 True
4 bob M 20 True
#删除列
del data["employee"]
##方法2,axis =1 代表按照列删除,默认为0,即按照行删除
data = data.drop("employee",axis = 1)
name gender age
0 jerry M 36
1 emma F 23
2 tony M 34
4 bob M 20
- 删除多列,用drop方法,del每次只能删除一列,并且效率没有drop高
data.drop(["test","test2"],1)
注意:关于drop方法有一个可选参数inplace,需要了解,详细内容见Python drop方法删除列之inplace参数
增加行的操作上面已经演示过。工作中较少用。
6.缺失值
- 检查某列是否含有缺失值
#检查gender列是否含有缺失值
data["gender"].isnull()
data["gender"].notnull()
#检查gender列是否还有缺失值
data["gender"].isnull().values.any()
#检查整个DataFrame是否还有缺失值
data.isnull().values.any()
- 计算缺失值的数量
#计算各列缺失值的数量
data.isnull().sum()
#计算总的缺失值数量
data.isnull().sum().sum()
- 关于缺失值的处理主要有三种方法,一是舍弃缺失值,二是使用平均值,中位数,众数等描述性统计量填充,三是使用内插法补齐缺失值
#舍弃含有任意缺失值的行
data.dropna()
#舍弃所有列都含有缺失值的行
data.dropna(how="all")
#舍弃超过两列含有缺失值的行
data.dropna(thresh=2)
#用0填补缺失值
data.fillna(0)
#用年龄的平均值填补年龄这列的缺失值
data['age'].fillna(data["age"].mean())
#用各性别年龄的平均值填补缺失值
data['age'].fillna(data.groupby("gender")["age"].transform("mean"))