一、合并数据集




代码

merge(



  1. 如果没有通过on指定按哪个列进行连接,就默认按照重叠的列名进行连接
  2. 默认是inner,还可以是 left、right、outer,通过how参数赋值指定
  3. 如果根据多个键进行个并,传入这些列构成的列表
  4. suffixes,用于追加到重叠列名的末尾
  5. 索引参于合并,就是left_index、right_index 是否为True)
df1=DataFrame({       'key'       :[       'b'       ,       'd'       ,       'b'       ,       'g'       ,       'd'       ,       'u'       ,       'a'       ],       'data1'       :range(7)})


df2=DataFrame({       'key'       :[       'b'       ,       'd'       ,       's'       ],       'data2'       :range(3)})


df3=pd.merge(df1,df2)


#print(df3)


#外连接,并集


print(pd.merge(df1,df2,how=       'outer'       ))


#左链接


print(pd.merge(df1,df2,how=       'left'       ))


#右链接


print(pd.merge(df1,df2,how=       'right'       ))

join( 默认是左连接的)


df1=DataFrame({       'key'       :[       'b'       ,       'd'       ,       'b'       ,       'g'       ,       'd'       ,       'u'       ,       'a'       ],       'data1'       :range(7)})


df2=DataFrame({       'key'       :[       'b'       ,       'd'       ,       's'       ],       'data2'       :range(3)})


#print(df1)


#print(df2)


df3=pd.merge(df1,df2)


#print(df3)


print(       '*******************我是分隔符************************'       )


#外连接,并集


print(pd.merge(df1,df2,how=       'outer'       ))


#左链接


print(       '*******************我是分隔符************************'       )


print(pd.merge(df1,df2,how=       'left'       ))


#右链接


print(       '*******************我是分隔符************************'       )


print(pd.merge(df1,df2,how=       'right'       ))

concat轴向连接() 当没有索引时、concat不管列名, 直接加到一起,可以加到后面、也可以加到右边,axis=0为加到后面,axis=1为加到右边,左边的数据结构没有变,变的是右边数据结构。




2.合并重叠数据

combine_first

它实现既不是行之间的连接,也不是列之间的连接,它在为数据“打补丁”:用参数对象中的数据为调用者对象的缺失数据“打补丁”。

三、数据转换

1.移除重复数据


  1. duplicated()返回布尔型序列;
  2. drop_duplicates()返回移除重复行的数据框;
  3. 默认判断全部列,也可以指定要判断的列;
  4. 默认保留第一个出现的值,通过keep=last可以设置保留最后一个/take_last=True





'k1':[       'one']*       3+[       'two']*       4,       'k2':[       1,       1,       2,       3,       3,       4,       4]})      


       print(data)      


       print(data.duplicated())      


'k3']=range(       7)      


'k1'))      


print(data.drop_duplicates(       'k1'       ,keep=       'last'       ))

2. 利用函数或映射进行数据转换

Series的map可以接受一个函数或有映射关系的字典型对象

3. 替换值

    不修改原始数据

s1=Series([1,999,-1000,2,999])


print(s1)


print("*************repalce替换一个值*************")


print(s1.replace(999,np.nan))


print("*************repalce对不同的值进行不同的替换*************")


print(s1.replace([999,-1000],[np.nan,'None']))


print("*************repalce参数形式为字典*************")


print(s1.replace({999:np.nan,-1000:'空值啦'}))

4.重命名轴索引

data=DataFrame(np.arange(12).reshape(3,4),index=['Ohio','Colorado','NewYork'],columns=['one','two','three','four'])


print(data)


print('**************此种方式是就地修改原始数据********************')


data.index=data.index.map(str.upper)#此种方式是就地修改原始数据


print(data)


print('**************这种是通过创建数据的转换版********************')


print        (data.rename(index=str.title,columns=str.upper))        #这种是通过创建数据的转换版,如果希望就地修改,加参数inplace=True


print(        '**************还是那个原始数据********************'        )


print(data)        #原始数据依旧不变


print('**************结合字典类型对象实现对部分轴标签的更新********************')


print(data.rename(index={'OHIO':'Beijing','COLORADO':'Shanghai'},columns={'one':'first','two':'second'}))

5.离散化和面元划分

#离散化和面元划分


20,         22,         25,         27,         31,         21,         23,         37,         61,         41,         32]        


18,         25,         35,         60,         100]        


         cats=pd.cut(ages,bin)        


'****************数据划分***********************')        


         print(cats)        


'****************以年龄数据进行分组标号******************')        


         print(cats.codes)        


'****************统计分组组次和频数******************')        


         print(pd.value_counts(cats))        


'Youth',         'YoungAdult',         'MiddleAged',         'Senior']        


'**************设置自己的面元(分组)名称***************')        


         print(pd.cut(ages,bin,labels=group_names))        


'**********统计设置自己的面元(分组)名称后的组次和频数***********')        


         print(pd.value_counts(pd.cut(ages,bin,labels=group_names)))





'**************cut中传入面元数量而不是面元名称************')        


20)         #正态分布


4,precision=         5)        


         print(data_cut)        


'****************统计分组组次和频数******************')        


1000)        


4)        


'****************按四分位数进行切割******************')        


         print(data1_cut)        


'****************统计分组组次和频数******************')        


         print(pd.value_counts(data1_cut))        


'****************设置自定义分位数******************')        


0,         0.1,         0.5,         0.9,         1])        


         print(data1_cut1)        


'****************统计分组组次和频数******************')        


         print(pd.value_counts(data1_cut1))

6. 检测和过滤异常值