• 售前

  • 售后

热门帖子
入门百科

pandas调解列的次序以及添加列的实现

[复制链接]
浩渺小竹排浩az 显示全部楼层 发表于 2021-10-26 14:29:23 |阅读模式 打印 上一主题 下一主题
在对excel的操纵中,调整列的顺序以及添加一些列也是常常用到的,下面我们用pandas实现这一功能。
1、调整列的顺序
  1. >>> df = pd.read_excel(r'D:/myExcel/1.xlsx')
  2. >>> df
  3.   A B C D
  4. 0  bob 12 78 87
  5. 1 millor 15 92 21
  6. >>> df.columns
  7. Index(['A', 'B', 'C', 'D'], dtype='object')
  8. # 这是最简单常用的一种方法,相当于指定列名让pandas
  9. # 从df中获取
  10. >>> df[['A', 'D', 'C', 'B']]
  11.   A D C B
  12. 0  bob 87 78 12
  13. 1 millor 21 92 15
  14. # 这也是可以的
  15. >>> df[['A', 'A', 'A', 'A']]
  16.   A  A  A  A
  17. 0  bob  bob  bob  bob
  18. 1 millor millor millor millor
复制代码
2、添加某一列大概某几列

(1)直接添加
  1. >>> df['E']=[1, 2]
  2. >>> df
  3.   A B C D E
  4. 0  bob 12 78 87 1
  5. 1 millor 15 92 21 2
复制代码
(2)调用assign方法。该方法善于根据已有的列添加新的列,通过根本运算,大概调用函数
  1. >>> df
  2.   A B C D
  3. 0  bob 12 78 87
  4. 1 millor 15 92 21
  5. # 其中E是列名,根据B列-C列的值得到
  6. >>> df.assign(E=df['B'] - df['C'])
  7.   A B C D E
  8. 0  bob 12 78 87 -66
  9. 1 millor 15 92 21 -77
  10. # 添加两列也可以
  11. >>> df.assign(E=df['B'] - df['C'], F=df['B'] * df['C'])
  12.   A B C D E  F
  13. 0  bob 12 78 87 -66 936
  14. 1 millor 15 92 21 -77 1380
复制代码
哈哈,以上就是pandas关于调整列的顺序以及新增列的用法
补充:pandas修改DataFrame中的列名&调整列的顺序
修改列名:

直接调用接口:
  1. df.rename()
复制代码
看一下接口中的定义:
  1. def rename(self, *args, **kwargs):
  2.   """
  3.   Alter axes labels.
  4.   Function / dict values must be unique (1-to-1). Labels not contained in
  5.   a dict / Series will be left as-is. Extra labels listed don't throw an
  6.   error.
  7.   See the :ref:`user guide <basics.rename>` for more.
  8.   Parameters
  9.   ----------
  10.   mapper, index, columns : dict-like or function, optional
  11.    dict-like or functions transformations to apply to
  12.    that axis' values. Use either ``mapper`` and ``axis`` to
  13.    specify the axis to target with ``mapper``, or ``index`` and
  14.    ``columns``.
  15.   axis : int or str, optional
  16.    Axis to target with ``mapper``. Can be either the axis name
  17.    ('index', 'columns') or number (0, 1). The default is 'index'.
  18.   copy : boolean, default True
  19.    Also copy underlying data
  20.   inplace : boolean, default False
  21.    Whether to return a new DataFrame. If True then value of copy is
  22.    ignored.
  23.   level : int or level name, default None
  24.    In case of a MultiIndex, only rename labels in the specified
  25.    level.
  26.   Returns
  27.   -------
  28.   renamed : DataFrame
  29.   See Also
  30.   --------
  31.   pandas.DataFrame.rename_axis
  32.   Examples
  33.   --------
  34.   ``DataFrame.rename`` supports two calling conventions
  35.   * ``(index=index_mapper, columns=columns_mapper, ...)``
  36.   * ``(mapper, axis={'index', 'columns'}, ...)``
  37.   We *highly* recommend using keyword arguments to clarify your
  38.   intent.
  39.   >>> df = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]})
  40.   >>> df.rename(index=str, columns={"A": "a", "B": "c"})
  41.    a c
  42.   0 1 4
  43.   1 2 5
  44.   2 3 6
  45.   >>> df.rename(index=str, columns={"A": "a", "C": "c"})
  46.    a B
  47.   0 1 4
  48.   1 2 5
  49.   2 3 6
  50.   Using axis-style parameters
  51.   >>> df.rename(str.lower, axis='columns')
  52.    a b
  53.   0 1 4
  54.   1 2 5
  55.   2 3 6
  56.   >>> df.rename({1: 2, 2: 4}, axis='index')
  57.    A B
  58.   0 1 4
  59.   2 2 5
  60.   4 3 6
  61.   """
  62.   axes = validate_axis_style_args(self, args, kwargs, 'mapper', 'rename')
  63.   kwargs.update(axes)
  64.   # Pop these, since the values are in `kwargs` under different names
  65.   kwargs.pop('axis', None)
  66.   kwargs.pop('mapper', None)
  67.   return super(DataFrame, self).rename(**kwargs)
复制代码
留意:
一个*,输入可以是数组、元组,会把输入的数组或元组拆分成一个个元素。
两个*,输入必须是字典格式
示例:
  1. >>>import pandas as pd
  2. >>>a = pd.DataFrame({'A':[1,2,3], 'B':[4,5,6], 'C':[7,8,9]})
  3. >>> a
  4. A B C
  5. 0 1 4 7
  6. 1 2 5 8
  7. 2 3 6 9
  8. #将列名A替换为列名a,B改为b,C改为c
  9. >>>a.rename(columns={'A':'a', 'B':'b', 'C':'c'}, inplace = True)
  10. >>>a
  11. a b c
  12. 0 1 4 7
  13. 1 2 5 8
  14. 2 3 6 9
复制代码
调整列的顺序:

如:
  1. >>> import pandas
  2. >>> dict_a = {'user_id':['webbang','webbang','webbang'],'book_id':['3713327','4074636','26873486'],'rating':['4','4','4'],
  3. 'mark_date':['2017-03-07','2017-03-07','2017-03-07']}
  4. >>> df = pandas.DataFrame(dict_a) # 从字典创建DataFrame
  5. >>> df # 创建好的df列名默认按首字母顺序排序,和字典中的先后顺序并不一样,字典中'user_id','book_id','rating','mark_date'
  6. book_id mark_date rating user_id
  7. 0 3713327 2017-03-07 4 webbang
  8. 1 4074636 2017-03-07 4 webbang
  9. 2 26873486 2017-03-07 4 webbang
复制代码
直接修改列名:
  1. >>> df = df[['user_id','book_id','rating','mark_date']] # 调整列顺序为'user_id','book_id','rating','mark_date'
  2. >>> df
  3. user_id book_id rating mark_date
  4. 0 webbang 3713327 4 2017-03-07
  5. 1 webbang 4074636 4 2017-03-07
  6. 2 webbang 26873486 4 2017-03-07
复制代码
就可以了。
以上为个人经验,希望能给各人一个参考,也希望各人多多支持脚本之家。如有错误或未思量完全的地方,望不吝见教。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作