当前位置:   article > 正文

dataframe在特定列 插入_D08 Pandas DataFrame 插入、关联、修改、删除 方法合集

python 两个dataframe取消关联

title: D08|Pandas DataFrame插入、关联、修改、删除
author: Adolph Lee
categories: 数据挖掘基础
tags:

  • Python
  • 数据挖掘基础
  • Pandas
  • DataFrame

d272aee98ebbccf306e28def5bf93aa2.png

插入

insert 插入列

insert(self, loc, column, value, allow_duplicates=False)

  •   loc 插入列索引的位置
  •   column 插入列的名称
  •   value 插入值 可以是整数、Series或者相同结构的数组
  •   是否允许列索引名称重复,默认为False 当列索引名称重复时抛出异常
  •   返回值为None,其直接在原df基础上修改

import pandas as pdimport numpy as npmain_df = pd.DataFrame(np.arange(0,30).reshape(6,5),index=['a','c','d','e','f','b'],columns=['A','B','C','D','E'])sub_df = pd.DataFrame(np.arange(100,118).reshape(6,3),columns=['A','B','C'])main_df.insert(3,'F',sub_df.loc[:,['A']].values)print(main_df)

417520d506ef7707a523c30302f27215.png

append 插入行

append(self, other, ignore_index=False, verify_integrity=False, sort=None)

  •   other 插入值 可以是DataFrame 、Series、或者类似结构的数组、列表
  •   ignore_inde 是否忽略原来的行索引,生成新的RangeIndex行索引,默认为Fasle 不忽略
  •   verify_integrity 验证行索引是否重复,若重复则抛出异常
  •   sort 对新的df排序,使用时请手动设置为False
  •   返回值为新的DataFrame

import pandas as pdimport numpy as npmain_df = pd.DataFrame(np.arange(0,30).reshape(6,5),index=['a','c','d','e','f','b'],columns=['A','B','C','D','E'])sub_df = pd.DataFrame(np.arange(100,118).reshape(6,3),columns=['A','B','C'])main_df = main_df.append(sub_df.loc[[5],:],ignore_index=True,sort=False)print(main_df)

670d8fdcaa7ffe8ea72c6f05c0ce5d0f.png

关联

join

join(self, other, on=None, how=’left’, lsuffix=’’, rsuffix=’’, sort=False)
同通过行索引或指定列,关联另一个列表或Series中的元素,返回一个新列表。类似sql的join。可以将其描述为一个DataFrame列或行索引与另一个DataFrame的行索引关联。

  •   other 关联的数据,可以是DataFram、Series
  •   on 指定要关联的列,默认是通过行索引进行关联
  •   how 关联方式,提供left join 左联,right join 右联,out join 外联, inner join内联,默认为left
  •   lsuffix 为了避免字段名重复,为左关联对象字段添加后缀
  •   lsuffix 为了避免字段名重复,为右关联对象字段添加后缀
  •   sort 排序,默认为False
  •   返回一个新的DataFrame
    下面的案例中主要以左关联为主讲解,更多方式请自行尝试。

import pandas as pdimport numpy as npleft_df = pd.DataFrame(np.arange(0,30).reshape(6,5),columns=['A','B','C','D','E'])right_df = pd.DataFrame(np.arange(0,18).reshape(6,3),columns=['A','F','G'])print(left_df,'',right_df)# 左DataFrame的‘A’列关联右DataFrame 行索引new_df = left_df.join(right_df,on='A',how='left',lsuffix='_left',rsuffix='_right')print(new_df) # 可以看到右DataFrame第0行和第5行被关联成功# 左DataFrame的行索引关联右DataFrame的行索引new_df = left_df.join(right_df,lsuffix='_left',rsuffix='_right')print(new_df)# 左DataFrame的'A'列与右DataFrame的'A'列关联new_df = left_df.join(right_df.set_index('A'),on='A') # 将右DataFrame的’A‘列设置为索引即可print(new_df)new_df = left_df.set_index('A').join(right_df.set_index('A')) # 或将两个DataFrame的行索引都设置为需要关联的列print(new_df)

cdfe137c4772e73f702fe3aac18f069a.png

merge

merge(self, right, how=’inner’, on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=(‘_x’, ‘_y’), copy=True, indicator=False, validate=None)
这个方法参数很多,不要被吓到,其实它跟join类似,比join强大的地方在于,它可以指定任意列进行关联,而不需要将其转换为索引的形式,它同时也兼容了join的功能。

  •   right 需要关联的DataFrame
  •   how 关联方式,提供left join 左联,right join 右联,out join 外联, inner join内联,默认为inner
  •   on 关联列索引名称,当左右DataFrame的关联列索引名称相同时,可以直接指定on,而省略left_on 和 right_on
  •   left_on 左DataFrame被关联的列名
  •   right_on 右DataFrame被关联的列名
  •   left_index 使用左DataFrame的行索引进行关联,默认为False
  •   right_index 使用右DataFrame的行索引进行关联,默认为False
  •   sort 排序 默认为False
  •   suffixes 为了避免字段名重复,为两个DataFrame列索引增加后缀,默认为(‘’,’’)
  •   copy 拷贝数据,默认为False
  •   indicator 默认为False,如果为真,则会添加一个解释列。用以解释,关联结果。
  •   validate 检测左右DataFrame的合并键是否属于指定类型。值域{one_to_one,one_to_many,many_to_one,many_to_many}

import pandas as pdimport numpy as npleft_df = pd.DataFrame(np.arange(0,30).reshape(6,5),columns=['F','B','A','D','E'])right_df = pd.DataFrame(np.arange(0,18).reshape(6,3),columns=['A','F','G'])print(left_df,'',right_df)# 左DataFrame的‘B’列关联右DataFrame‘F’列new_df = left_df.merge(right_df,left_on='B',right_on='F',how='left',suffixes=('_left','_right'))print(new_df)# 左DataFrame的‘F’列关联右DataFrame‘F’列 # 当使用左/右关联时,作为关联列的Key在左右侧名称相同时,会只保留左侧/右侧。new_df = left_df.merge(right_df,on='A',how='left',suffixes=('_left','_right'))print(new_df)

28f8da918bc519125783390eca582bbb.png

修改

Update

update(self, other, join=’left’, overwrite=True, filter_func=None, errors=’ignore’)
关联并替换原有的值,通过列索引关联,并替换相同列索引对应的值

  •   other 关联替换的值,DataFrame或Series
  •   join 关联方式 仅支持左关联
  •   overwrite 默认为True替换所有能够关联的值,若为False则仅替换NaN值
  •   errors 值为’raise’ or ‘ignore’,决定能够匹配的行,左右都存在NaN值时是否抛出异常

import pandas as pdimport numpy as npleft_df = pd.DataFrame(np.arange(0,30).reshape(6,5),columns=['F','B','A','D','E'])right_df = pd.DataFrame(np.arange(100,118).reshape(6,3),index=[0,2,4,6,8,10],columns=['A','F','G'])print(left_df,'',right_df)left_df.update(right_df)# 建议自己替换一下参数,观察替换结果的变化print(left_df)

cc68e4dcc99d0f9fed6f296fa0a8c9d3.png

at,iat,loc,iloc

import pandas as pdimport numpy as npleft_df = pd.DataFrame(np.arange(0,30).reshape(6,5),columns=['F','B','A','D','E'])print(left_df)left_df.at[1,'A'] = 999print(left_df)left_df.iloc[1:6,[3,4]] = 999print(left_df)
3389e98fb429a7dae14f18e02a298563.png

删除

pop

  •   删除列,并将被删除的列转化为Series返回

import pandas as pdimport numpy as npleft_df = pd.DataFrame(np.arange(0,30).reshape(6,5),columns=['F','B','A','D','E'])pop_A = left_df.pop('A')print(pop_A)

983d96fd8f0affb93f19cd40f52ca36f.png

drop

drop(self, labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors=’raise’)
通过指定行列索引来删除行或列

  •   labels 行、列索引的标签名称
  •   axis = 0 删除列 axis = 1 删除行
  •   index 行索引标签
  •   columns 列索引标签
  •   level 使用多级索引时,指定索引层级
  •   inplace 若为True则在原DataFrame上操作,返回空。若为False则返回新DataFrame
  •   errors 当传入的标签不再DataFrame时,是否抛出异常。’raise’ or ‘ignore’
import pandas as pdimport numpy as npleft_df = pd.DataFrame(np.arange(0,30).reshape(6,5),columns=['F','B','A','D','E'])left_df.drop(columns='A',inplace=True)print(left_df)

5fc1929b1641fb5b684f4ce4bdaae7ab.png

dropna 、 drop_duplicate

  •   dropna 删除空值
  •   drop_duplicate 删除重复值

转载请注明出处。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/153169?site
推荐阅读
相关标签
  

闽ICP备14008679号