搜索

查看: 3108|回复: 11

[Python] Pandas.DataFrame删除指定行和列(drop)的实现

[复制链接]
发表于 2023-5-4 17:19:31 | 显示全部楼层 |阅读模式
Editor 2023-5-4 17:19:31 3108 11 看全部
目录
  • DataFrame指定的行删除
  • 按行名指定(行标签)
  • 按行号指定
  • 未设置行名的注意事项
  • DataFrame指定的列删除
  • 按列名指定(列标签)
  • 按列号指定
  • 多行多列的删除使用drop()方法删除pandas.DataFrame的行和列。
    在0.21.0版之前,请使用参数labels和axis指定行和列。从0.21.0开始,可以使用index或columns。
    在此,将对以下内容进行说明。
  • DataFrame指定的行删除
  • 按行名指定(行标签)
  • 按行号指定
  • 未设置行名的注意事项
  • DataFrame指定的列删除
  • 按列名指定(列标签)
  • 按列号指定
  • 多行多列的删除
    删除缺失值NaN和删除具有重复元素的行,请参考文章。
    Pandas删除,替换并提取其中的缺失值NaN(dropna,fillna,isnull)
    以下数据用作示例代码中的示例。
    import pandas as pd
    df = pd.read_csv('./data/12/sample_pandas_normal.csv', index_col=0)
    print(df)
    #          age state  point
    # name
    # Alice     24    NY     64
    # Bob       42    CA     92
    # Charlie   18    CA     70
    # Dave      68    TX     70
    # Ellen     24    CA     88
    # Frank     30    NY     57
    DataFrame指定的行删除
    按行名指定(行标签)
    它由第一个参数labels和第二个参数axis指定。行指定axis= 0。
    print(df.drop('Charlie', axis=0))
    #        age state  point
    # name                  
    # Alice   24    NY     64
    # Bob     42    CA     92
    # Dave    68    TX     70
    # Ellen   24    CA     88
    # Frank   30    NY     57
    默认值为axis = 0,因此可以省略axis。
    print(df.drop('Charlie'))
    #        age state  point
    # name                  
    # Alice   24    NY     64
    # Bob     42    CA     92
    # Dave    68    TX     70
    # Ellen   24    CA     88
    # Frank   30    NY     57
    从0.21.0或更高版本开始,它也可以由参数索引指定。
    print(df.drop(index='Charlie'))
    #        age state  point
    # name                  
    # Alice   24    NY     64
    # Bob     42    CA     92
    # Dave    68    TX     70
    # Ellen   24    CA     88
    # Frank   30    NY     57
    如果要一次删除多行,请在列表中指定。
    print(df.drop(['Bob', 'Dave', 'Frank']))
    #          age state  point
    # name                     
    # Alice     24    NY     64
    # Charlie   18    CA     70
    # Ellen     24    CA     88
    print(df.drop(index=['Bob', 'Dave', 'Frank']))
    #          age state  point
    # name                     
    # Alice     24    NY     64
    # Charlie   18    CA     70
    # Ellen     24    CA     88
    默认情况下,原始DataFrame保持不变,并返回一个新的DataFrame。如果参数inplace设置为True,则将更改原始DataFrame。在这种情况下,不会返回任何新的DataFrame,并且返回值为None。

    按行号指定
    如果要按行号指定,请使用DataFrame的index属性。
    如果在index属性的[]中指定行号,则可以获得相应的行名。可以在列表中指定多个行号。
    print(df.index[[1, 3, 5]])
    # Index(['Bob', 'Dave', 'Frank'], dtype='object', name='name')
    在drop()第一个的参数中指定labels或index的名称。
    print(df.drop(df.index[[1, 3, 5]]))
    #          age state  point
    # name                     
    # Alice     24    NY     64
    # Charlie   18    CA     70
    # Ellen     24    CA     88
    print(df.drop(index=df.index[[1, 3, 5]]))
    #          age state  point
    # name                     
    # Alice     24    NY     64
    # Charlie   18    CA     70
    # Ellen     24    CA     88
    未设置行名的注意事项
    如果未设置行名,则index默认为整数序号。当使用数字值而不是这样的字符串作为索引时要小心。
    df_noindex = pd.read_csv('./data/12/sample_pandas_normal.csv')
    print(df_noindex)
    #       name  age state  point
    # 0    Alice   24    NY     64
    # 1      Bob   42    CA     92
    # 2  Charlie   18    CA     70
    # 3     Dave   68    TX     70
    # 4    Ellen   24    CA     88
    # 5    Frank   30    NY     57
    print(df_noindex.index)
    # RangeIndex(start=0, stop=6, step=1)
    如果是序列号,则无论原样指定数字值还是使用index属性,结果都将相同。
    print(df_noindex.drop([1, 3, 5]))
    #       name  age state  point
    # 0    Alice   24    NY     64
    # 2  Charlie   18    CA     70
    # 4    Ellen   24    CA     88
    print(df_noindex.drop(df_noindex.index[[1, 3, 5]]))
    #       name  age state  point
    # 0    Alice   24    NY     64
    # 2  Charlie   18    CA     70
    # 4    Ellen   24    CA     88
    如果由于排序原因其不是序列号,结果将有所不同。当直接指定数字值时,将删除行标签为该数字值的行,而当使用index属性时,将删除其行号为该数字值的行。
    df_noindex_sort = df_noindex.sort_values('state')
    print(df_noindex_sort)
    #       name  age state  point
    # 1      Bob   42    CA     92
    # 2  Charlie   18    CA     70
    # 4    Ellen   24    CA     88
    # 0    Alice   24    NY     64
    # 5    Frank   30    NY     57
    # 3     Dave   68    TX     70
    print(df_noindex_sort.index)
    # Int64Index([1, 2, 4, 0, 5, 3], dtype='int64')
    print(df_noindex_sort.drop([1, 3, 5]))
    #       name  age state  point
    # 2  Charlie   18    CA     70
    # 4    Ellen   24    CA     88
    # 0    Alice   24    NY     64
    print(df_noindex_sort.drop(df_noindex_sort.index[[1, 3, 5]]))
    #     name  age state  point
    # 1    Bob   42    CA     92
    # 4  Ellen   24    CA     88
    # 5  Frank   30    NY     57
    DataFrame指定的列删除
    按列名指定(列标签)
    它由第一个参数labels和第二个参数axis指定。列指定axis= 1。
    print(df.drop('state', axis=1))
    #          age  point
    # name               
    # Alice     24     64
    # Bob       42     92
    # Charlie   18     70
    # Dave      68     70
    # Ellen     24     88
    # Frank     30     57
    从0.21.0或更高版本开始,可以使用参数列指定它。
    print(df.drop(columns='state'))
    #          age  point
    # name               
    # Alice     24     64
    # Bob       42     92
    # Charlie   18     70
    # Dave      68     70
    # Ellen     24     88
    # Frank     30     57
    如果要一次删除多个列,请在列表中指定。
    print(df.drop(['state', 'point'], axis=1))
    #          age
    # name        
    # Alice     24
    # Bob       42
    # Charlie   18
    # Dave      68
    # Ellen     24
    # Frank     30
    print(df.drop(columns=['state', 'point']))
    #          age
    # name        
    # Alice     24
    # Bob       42
    # Charlie   18
    # Dave      68
    # Ellen     24
    # Frank     30
    参数inplace的使用方法与行的相同。
    df_org = df.copy()
    df_org.drop(columns=['state', 'point'], inplace=True)
    print(df_org)
    #          age
    # name        
    # Alice     24
    # Bob       42
    # Charlie   18
    # Dave      68
    # Ellen     24
    # Frank     30

    按列号指定
    如果要按列号指定,请使用DataFrame的columns属性。
    print(df.columns[[1, 2]])
    # Index(['state', 'point'], dtype='object')
    print(df.drop(df.columns[[1, 2]], axis=1))
    #          age
    # name        
    # Alice     24
    # Bob       42
    # Charlie   18
    # Dave      68
    # Ellen     24
    # Frank     30
    print(df.drop(columns=df.columns[[1, 2]]))
    #          age
    # name        
    # Alice     24
    # Bob       42
    # Charlie   18
    # Dave      68
    # Ellen     24
    # Frank     30
    如果columns是整数值,请小心上述行。

    多行多列的删除
    从0.21.0及更高版本开始,可以通过同时指定参数index和column来删除多行/多列。
    当然,也可以通过行号/列号指定,和使用参数inplace。
    print(df.drop(index=['Bob', 'Dave', 'Frank'],
                  columns=['state', 'point']))
    #          age
    # name        
    # Alice     24
    # Charlie   18
    # Ellen     24
    print(df.drop(index=df.index[[1, 3, 5]],
                  columns=df.columns[[1, 2]]))
    #          age
    # name        
    # Alice     24
    # Charlie   18
    # Ellen     24
    到此这篇关于Pandas.DataFrame删除指定行和列(drop)的实现的文章就介绍到这了,更多相关Pandas DataFrame删除指定行列内容请搜索知鸟论坛以前的文章或继续浏览下面的相关文章希望大家以后多多支持知鸟论坛
  • 回复

    使用道具 举报

    发表于 2023-6-29 03:17:08 | 显示全部楼层
    啤酒瓶空了缓 2023-6-29 03:17:08 看全部
    楼主发贴辛苦了,谢谢楼主分享!我觉得知鸟论坛是注册对了!
    回复

    使用道具 举报

    发表于 2023-6-29 10:32:50 | 显示全部楼层
    音乐之家1 2023-6-29 10:32:50 看全部
    楼主太厉害了!楼主,I*老*虎*U!我觉得知鸟论坛真是个好地方!
    回复

    使用道具 举报

    发表于 2023-6-29 12:26:45 | 显示全部楼层
    123456819 2023-6-29 12:26:45 看全部
    楼主发贴辛苦了,谢谢楼主分享!我觉得知鸟论坛是注册对了!
    回复

    使用道具 举报

    发表于 2023-6-29 20:55:22 | 显示全部楼层
    知足常乐77 2023-6-29 20:55:22 看全部
    我看不错噢 谢谢楼主!知鸟论坛越来越好!
    回复

    使用道具 举报

    发表于 2023-6-29 21:17:22 | 显示全部楼层
    丁侦球 2023-6-29 21:17:22 看全部
    楼主发贴辛苦了,谢谢楼主分享!我觉得知鸟论坛是注册对了!
    回复

    使用道具 举报

    发表于 2023-6-29 22:19:18 | 显示全部楼层
    执着等待等wc 2023-6-29 22:19:18 看全部
    论坛不能没有像楼主这样的人才啊!我会一直支持知鸟论坛
    回复

    使用道具 举报

    发表于 2023-6-30 00:19:57 | 显示全部楼层
    风来时狂放 2023-6-30 00:19:57 看全部
    这东西我收了!谢谢楼主!知鸟论坛真好!
    回复

    使用道具 举报

    发表于 2023-6-30 01:53:43 | 显示全部楼层
    风吹吹蛋蛋疼风w 2023-6-30 01:53:43 看全部
    既然你诚信诚意的推荐了,那我就勉为其难的看看吧!知鸟论坛不走平凡路。
    回复

    使用道具 举报

    发表于 2023-6-30 05:54:56 | 显示全部楼层
    素色流年783 2023-6-30 05:54:56 看全部
    楼主发贴辛苦了,谢谢楼主分享!我觉得知鸟论坛是注册对了!
    回复

    使用道具 举报

    • 您可能感兴趣
    点击右侧快捷回复 【请勿灌水】
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则 返回列表

    RSS订阅| SiteMap| 小黑屋| 知鸟论坛
    联系邮箱E-mail:zniao@foxmail.com
    快速回复 返回顶部 返回列表