一、合并数据集
数据库风格的DataFrame合并
数据集的合并merge或连接join运算是通过一个或多个键将行链接起来。
【一句话解释:merge就相当于join】
如果没有指定哪个列进行连接,merge会自动将重叠列的列名当作键。显示指示通过on来指定:
pd.merge(df1,df2,on='key')
merge默认的是inner连接,结果中的键是交集。其他的方式还有‘left’,‘right’,‘outer’。
多对多连接产生的是行的笛卡尔积,如df1有3个‘b'行,df2有2个,那么最终结果就有6个‘b'行。
也可以根据多个列名进行合并,只需传入由列面组成的列表。
merge有一个更实用的suffixes选项,用于指定附加到左右两个DataFrame对象的重叠列名上的字符串。
merge函数的参数:
二、索引上的合并
如果DataFrame的连接键位于索引中,在这种情况下,可以传入left_index=True或right_index=True用来说明是左边的DataFrame还是右边的DataFrame的索引被用作连接键。
DataFrame还有一个join方法,可以实现按索引合并,join方法是在连接键上做左连接。
三、轴向连接
NumPy有一个用于合并原始Numpy数组的concatenate函数:
---------太难了先放一下---------
字符串操作:
通过split分隔以逗号分隔的字符串:
split常常结合strip一起使用:
比如字符串x中有空格,则使用strip操作可以滤除空白符。
join函数:
find和index的区别:如果在字符串中找不到子串,那么index会返回一个异常,而find会返回-1;如果能找到,会返回子串的第一个字符的位置。
数据转换
移除重复数据
DataFrame的duplicated方法返回一个布尔型Series,表示各行是否是重复行:
dataframe还有一个用于移除重复行的方法:drop_duplicates
如果要根据某一列(k1)进行重复项判断,则可以传入参数data.drop_duplicates(['k1'])
duplicated和drop_duplicates默认保留第一个出现的值组合,如果想要保留最后一个则可以传入take_last=True。
Series的map方法可以接受含有映射关系的字典型对象:
使用map是一种实现元素级转换以及其他数据清理工作的便捷方式。
str.title可以把一个单词的首字母最大化。
rename可以更新轴索引名称
rename默认是对df复制的版本进行操作,如果希望就地修改,可以传入inplace=True
离散化和面元划分
cut和qcut函数:
1.cut
使用cut函数可以将ages中的每个值转化为bins中数值之间组成的区间:
cats有labels和levels两个属性:
通常统计学中的分组遵循“上组限不在内”原则,可以通过right=False将分组改为左闭右开
可以自己为面元设置名称,通过labels选项传入一个数组即可:
如果根据组的数量分组,则传入数字即可:
qcut是根据样本的分位数对数据进行面元划分。
可以设置自定义的分位数:
排列和随机采样
利用numpy.random.permutation函数可以轻松实现对Series或DataFrame的行的排列工作。
使用take函数,
计算指标/哑变量
pandas中有get_dummies函数可以实现该功能:将某个有k个不同值的列转化为k列矩阵。
set.union(*[{},{}])是集合取并集,中间的列表也可以替换为迭代器。
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
以下是 enumerate() 方法的语法:
enumerate(sequence, [start=0])
参数
- sequence -- 一个序列、迭代器或其他支持迭代对象。
- start -- 下标起始位置。
返回值
返回 enumerate(枚举) 对象。