None
None是Python自带的,其类型为python object。因此,None不能参与到任何计算中
np.nan(NaN)
np.nan是浮点类型,能参与到计算中。但计算的结果总是NaN
object类型相比于int类型运算时消耗时间更长
%timeit np.arange(1e5, dtype=object)
%timeit np.arange(1e5, dtype=int)
pandas中的None与NaN
判断函数
过滤函数
填充函数
获取全不为空的行,进行过滤
判断某一行的值
默认判断某一列的值
全为True才为True,类似and
某列是否全部为空
默认判断某一列的值
有一个为True则为True,类似or
某列是否存在空值
是否不为空
是否为空
df.isnull()
df.notnull()
df.isnull().any()
df.isnull().all()
df.notnull().all(axis=1)
df[df.notnull().all(axis=1)]
dropna()
df.dropna(how='all')
how默认是any
某行或列的值都为空的才删除
删除有空的列
默认删除有空的行
可以选择过滤的是行还是列(默认为行)
dropna()
df.dropna()
df.dropna(axis=1)
也可以选择过滤的方式 how = 'all'
df.fillna(value=9999)
df.fillna(method='bfill')
df.fillna(method='ffill')
df.fillna(method='bfill',axis=1)
df.fillna(method='ffill',axis=1)
填充指定值
加inplace=True,进行修改
axis=0,列的后面=>下
上
行的后面=>右
左
fillna()
pandas中None与np.nan都视作np.nan
pandas中None与np.nan的操作
检测重复行
只对abc三列进行检测是否重复
检测是否为第二次出现
使用duplicated()函数检测重复的行,返回元素为布尔类型的Series对象,每个元素对应一行,如果该行不是第一次出现,则元素为True
df.duplicated()
df.duplicated(subset=['a','b','c'])
删除重复行
cond = df.duplicated(subset=['a','b','c'])
df.loc[~cond]
np.logical_not(cond)
取反
使用drop_duplicates()函数删除重复的行
df.drop_duplicates()
df.drop_duplicates(subset=['a','b','c'])
过滤掉重复项
映射
df3.rename(index={'张三':'Mr Zhang'})
df3.rename({'张三':'Mr Zhang'})
df3.rename(columns={'语文':'Language'})
df3.rename({'数学':'Math'},axis=1)
默认修改行索引
修改列索引
修改列索引
使用map()函数,由已有的列生成一个新列
df2['政治'] = df2['语文'].map({84:100,11:100,78:100,24:100})
df2['政治'] = df2['语文'].map(lambda x:x*2)
def grade(x): if x<60: return '不及格' elif x<80: return '及格' else: return '优秀'df2['等级'] = df2['语文'].map(grade)
适合处理某一单独的列
使用replace()函数,对values进行替换操作
replace还经常用来替换NaN元素
df.replace({85:1000,12:3000})
df.replace({np.nan:0})
映射的含义
replace()函数:替换元素
map()函数:新建一列, 最重要
rename()函数:替换索引
创建一个映射关系列表,把values元素和一个特定的标签或者字符串绑定
需要使用字典
包含三种操作
概述
replace()函数:替换元素
map()函数:新建一列(行也可以)
rename()函数:替换索引
异常值检测和过滤
df22.sort_values('数学')
df22.sort_values('张三',axis=1)
df22.sort_values('语文',ascending=False)
排的是行的顺序
默认升序
按某列值排序
排的是列的顺序
按张三各科成绩从左往右升序
降序
df22.query('语文==24')
df22.query('语文
20 or 数学35')
df22.query('语文
20 | 数学63')
df22.query('语文>=78')
df22.query('语文 >= @score')
df22.query('语文 in @list1')
使用变量
df22['语文'].unique()
df22.drop('张三')
df22.drop('语文',axis=1)
删除行
删除指定的列
使用std()函数可以求得DataFrame对象每一列的标准差
借助any()函数, 测试是否有True,有一个或以上返回True,反之返回False
对每一列应用筛选条件,去除标准差太大的数据
cond = df['weight']<1000
df.loc[cond]
df.describe()
使用describe()函数查看每一列的描述性统计量
df.std()
删除特定索引df.drop(labels, inplace = True)
unique():唯一,去重
df.query:按条件查询
排序
抽样
df22.take(np.random.randint(0,4,size=10))
df22.take(np.random.permutation([0,1,2,3]))
permutation打乱顺序,take按照指定顺序排列
指定列顺序
行排序
指定行顺序
np.random.permutation([1,2,3,4,5])
可以借助np.random.permutation()函数随机排序
使用.take()函数排序
随机排列:打乱顺序
df22.take([1,0,2,3])
df22.take([1,0,2,3,4],axis=1)
模拟无放回抽样,不会拿到重复数据,依次拿去
模拟有放回抽样,取完一个之后,可能再次抽到相同的数据
数据聚合
得到分组情况
得到分组对象
数据聚合是数据处理的最后一步,通常是要使每一个数组生成一个单一的数值
数据分类处理
数据分类处理的核心: groupby()函数
分组:先把数据分为几组
用函数处理:为不同组的数据应用不同的函数以转换数据
合并:把不同组得到的结果合并起来
概述
df.groupby(by='color')
df.groupby(by='color').groups
df.groupby(by='color').sum()
df.groupby(by='color').mean()
高级数据聚合
apply()里面可以跟自定义的函数,包括简单的求和函数以及复杂的特征间的差值函数等
apply不能直接使用例如sum、max、min、’count'等方法
transform
df.groupby('color')[['price']].apply(sum)
transform() 里面不能跟自定义的特征交互函数
它只能对每一列进行计算,所以在groupby()之后,transform()之前是要指定要操作的列
如果与groupby()方法联合使用,需要对值进行去重
df.groupby('color')[['price']].transform(sum)
apply
用索引合并
ddd1.merge(ddd2,left_index=True,right_index=True)
pd.read_csv('../data/SMSSpamCollection',sep='\t',header=None)
df = pd.read_table('../data/SMSSpamCollection',header=None)
联系客服