【利用python进行数据分析】数据规整化:清理、转换、合并、重塑

一、合并数据集

数据库风格的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(枚举) 对象。

猜你喜欢

转载自blog.csdn.net/m0_37842667/article/details/82393164