datawhale-动手学数据分析task3笔记
动手学数据分析task3
数据重构
数据合并
-
.concat()函数可以基于整体合并DF和Series,包括columns合并和index合并。''' 参数说明: - objs=sequence/mapping,其元素是要合并的Dataframe或series - axis=0/1,沿着行/列合并 - join='outer'/'inner',合并时索引对齐方式 outer是单独拼接无改变(即index拼接时,index直接累加,而columns取并集,缺失值填充NaN),而inner是交联拼接(即index拼接时,index直接累加,而columns只保留交集的columns) - ignore_index=Bool,是否忽略掉原来的数据索引(即是否重新排序) - keys=None/sequence,合并DF后的index标签(即原index在DF合并后的index,与level相反,keys是分别的index而levels是合并的inex) - levels=None/sequence,合并需要合并的index后的index - names=None/list,为MultiIndex(多级索引)中的每个级别命名 - verify_integrity=Bool,检查新连接的轴是否包含重复项 - sort=Bool,True时,连接后的轴标签将根据字典顺序进行排序 - copy=Bool,True时,会返回副本,False则返回原始数据 ''' # 以下有具体值的为默认值 pd.concat(objs, axis=0, join='outer', ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=False, copy=True) -
当多个index和columns都需合并时,可以采取多次
pd.concat()合并。 -
.join()方法可以基于index键合并DF。''' 参数说明: - other=Dataframe/Series,其是要合并的内容 - on=None/str/str list,指定合并columns,会基于on指定的columns进行合并DF,即保留指定的column中的相同value的index - how='left'/'right'/'outer'/'inner'/'cross',连接方式,即使用指定DataFrame的index(合并后非指定DF),inner则是使用交集index,outer是使用并集index。 - lsuffix=''/str,即为left DF中交集的index加的后缀 - rsuffix=''/str,同上,但为right DF - sort=Bool,True时,连接后的轴标签将根据字典顺序进行排序 - validate=None/'1:1'/'1:m'/'m:1'/'m:m',检查合并index是否有重复值,如果是'1:m'则允许right DF有重复index,其余同理 ''' # 以下有具体值的为默认值 df.join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False, validate=None) -
.merge()函数是基于column键合并DF和Series。''' 参数说明: - left=right=Dataframe/Series,其是要合并的内容 - how同上join - on同上join - left_on=None/str/str list,left DF指定合并columns,同on,但是是left_on与right_on替代了on - left_index=Bool,如果True,则使用left DF的index作为合并键 - right_index=Bool,如果True,则使用right DF的index作为合并键 - sort同上join - suffixes=(left_str, right_str),即为DF中交集的index分别加的后缀 - copy=Bool,True时,会返回副本,False则返回原始数据 - indicator=Bool/str,如果True,将添加一个名为_merge的列到输出DF中,显示每行数据的来源('left_only', 'right_only', 'both'),如果为字符串,则用作该列的列名 - validate同上join ''' # 以下有具体值的为默认值 pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=None, indicator=False, validate=None) -
.concat()和.join()、.merge()的区别:-
.concat()函数偏重于沿着一个特定的轴连接两个或多个DF或Series对象。 -
.join()函数偏重于基于一个或多个index键合并两个DF对象(必须有合并的键),但on参数是可选的。 -
.merge()函数偏重于基于一个或多个columns键合并两个DF对象(必须有合并的键),但on参数是必需的(如果启用index作为合并键则不需要)。 -
.join()和.merge()要想实现.concat效果可以配合append方法。
-
有关数据和并部分方法的Blog可以参考:Pandas拼接操作与官方wiki
转变数据类型
-
可以用iloc将DF转化为series:
for i in df.index: pf=result.iloc[i,:] pfs.append(pf) -
.stcak()方法可以将DF的列旋转成行,从而将DF转化为Series。''' 参数说明: level=int/str,用于指定从哪个级别开始堆叠,-1即最内层级别 dropna=Bool,是否删除结果中缺少值的行 sort=Bool,是否排序index future_stack=Bool,是否使用新的stack方法 ''' # 以下有具体值的为默认值 DataFrame.stack(level=-1, dropna=True, sort=True, future_stack=False)
数据聚合与运算
-
Groupby用于将数据集按照一个或多个指定的column进行分组,并对每个分组应用某些操作或函数,从而得到每个分组的统计信息或其他计算结果。
-
df[column1].groupby(df[column2])得到的结果是根据 column2 的值对 column1 的数据进行分组的情况。
data = { 'salary': [50000, 60000, 45000, 70000, 55000, 65000], 'department': ['A', 'B', 'A', 'B', 'A', 'C'] } df = pd.DataFrame(data)
# 使用 groupby 对 salary 列按照 department 列进行分组,并计算平均值 df['salary'].groupby(df['department']).describe()
-
通过
.groupby()方法即可生成groupby类型对象。''' 参数说明: by=None/column/columns,进行分组的column,多columns会按这些列的值的组合进行分组(多类分组),None不分组 level=int/level name,如果columns是一个MultiIndex,则按照级别编号或名称分组 sort=Bool,分组之前是否对数据进行排序 group_keys=None/Bool,是否保留分组键 observed=Bool,是否只显示实际观察到的类别 dropna=Bool,是否删除不含任何数据的组 ''' # 以下有具体值的为默认值 df.groupby(by=None, level=None, as_index=True, sort=False, group_keys=no_default, observed=True, dropna=True) -
单类分组和多类分组。
group = df.groupby(a) group = df.groupby([a, b]) -
groupby类型的计算函数。
group = df['Fare'].groupby(df[Sex]) group.size() # 输出:分Sex组的Sex数据 group.mean() # 输出:分Sex组后的Fare平均值