数据结构实现方式:Series和DataFrame
Pandas本身是建立在NumPy之上的,故NumPy中的一维数组都可转化为Series
Series
- 创建
可通过列表或数组直接创建
a、s1 = Series([1,2,3])
b、s2 = Series([1,2,3], index=['a', 'b', 'c'])
c、s3 = Series(d1), d1={'a':1, 'b':2, 'c':3}
d、s3.index Index(['a','b','c'], dtype='object'), s3.index = ['A', 'B', 'C']
- 索引
同numpy
a、s1.values 来获取全部数据
- 数据结构转换
a、s1.to_string():转化为字符串
b、s1.to_dict():转化为字典
c、s1.tolist():转化为列表
d、s1.to_json():转化为JSON
e、s1.to_frame():转化为DataFrame
f、s1.to_csv():存储为CSV文件格式
DataFrame
- 创建
a、从CSV文件中读取
b、字典创建:df = DataFrame(d2), d2 = {'prev':[-3,-2,-1], 'now':[0,0,0], 'next':[1,2,3]}
- 行列索引
列索引
a、单列:df.counttime df['counttime']
b、多列:df[['counttime', 'innum']] df[df.columns[0:2]]
行索引
a、单行:df.ix[0] df.ix['a']
b、多行:df.ix[0:2] df.ix[['a', 'b']]
同时指定行列
a、loc:使用行列的标签进行索引,df.loc['a':'c', 'counttime']
b、iloc:使用证书进行索引,df.iloc[0:3, 0]
c、ix:是loc和iloc的整合,可以混合使用整数和标签进行索引,df.ix[0:3,0] df.ix[0:3, 'counttime']
d、get_value、at、iat:用来获取单个数据
df.get_value('a', 'counttime')
df.at['a', 'counttime']
df.iat[0,0]
- 数据转换
布尔值数组和函数应用
- 基于布尔值数组的条件过滤
a、通过一些条件获取布尔值数组
b、进行索引操作以获取符合条件的数据
c、举例:
(1)df['prev'] >= 2
df[df['prev'] >= 2]
(2)多条件过滤
df[(df['prev'] >= 2) & (df['next']>=-2)]
(3)简化程序
df.query("prev>=2 and next>=-2")
(4)条件过滤值来自其他程序,则需要在此变量前加@
df.query("(prev>=@g_value and next>=-2) or prev==1")
- 函数应用
a、数据分轴,0为纵轴(列),1为横轴(行)
b、df.sum() df.mean() df.max() df.min()
c、df.describe():给出关于数据的一些统计信息
d、对于Series,可以使用map实现对每个元素进行同样的操作
e、对于DataFrame,可以使用apply实现函数自定义,使用applymap实现对DataFrame中的每个数据进行相同的操作
数据清洗
- 编码问题
这个主要用在爬虫爬取大量的文本数据时,爬取下来的网页一般编码是有问题的,需要使用ftfy中的fix_text来修复编码问题
- 缺失值的检测与处理
a、df.isnull():缺失值检测
b、df.isnull().sum():可以计算出每列有多少个缺失值
c、df.fillna('missing'):指定特定的值来填补缺失值
df.fillna(method='bfill', limit=1):指定相应的方法,来根据周围的之来填补缺失值,本例是使用缺失值后面的值,limit是用于限制连续填充的个数
ffill
df.interpolate(method='polynomial', order=2):插值方法进行填充
spline
- 去除异常值
(1)df.dropna()
(2)df.dropna(how='all'):有一个数据为NaN,就去除整行或者整列数据,行列用axis来指定
(3)df.dropna(how='any'):某行或某列的全部数据为NaN,才去除
- 去除重复值与冗余信息
(1)df.drop_duplicates():去除重复数据
a、subset=None:默认对整个数据进行去重,可通过制定此参数来对特定的列进行去重
b、keep='first':在有重复值的时候,只保留第一次出现的数据,'last'保留最后出现的数据,'False'会去除所有重复的数据
c、inplace=False:当为False时,不改变原来的数据,生成一个新的对象
(2)去除无用列
a、df.drop('B',axis=1)
- 注意事项
注意对原数据和过程数据的备份