pandas调整列的顺序以及添加列的实现

在对excel的操作中,调整列的顺序以及添加一些列也是经常用到的,下面我们用pandas实现这一功能。

1、调整列的顺序

>>> df = pd.read_excel(r'D:/myExcel/1.xlsx')
>>> df
  A B C D
0  bob 12 78 87
1 millor 15 92 21
>>> df.columns
Index(['A', 'B', 'C', 'D'], dtype='object')
# 这是最简单常用的一种方法,相当于指定列名让pandas
# 从df中获取
>>> df[['A', 'D', 'C', 'B']]
  A D C B
0  bob 87 78 12
1 millor 21 92 15
# 这也是可以的
>>> df[['A', 'A', 'A', 'A']]
  A  A  A  A
0  bob  bob  bob  bob
1 millor millor millor millor

2、添加某一列或者某几列

(1)直接添加

>>> df['E']=[1, 2]
>>> df
  A B C D E
0  bob 12 78 87 1
1 millor 15 92 21 2

(2)调用assign方法。该方法善于根据已有的列添加新的列,通过基本运算,或者调用函数

>>> df
  A B C D
0  bob 12 78 87
1 millor 15 92 21
# 其中E是列名,根据B列-C列的值得到
>>> df.assign(E=df['B'] - df['C'])
  A B C D E
0  bob 12 78 87 -66
1 millor 15 92 21 -77
# 添加两列也可以
>>> df.assign(E=df['B'] - df['C'], F=df['B'] * df['C'])
  A B C D E  F
0  bob 12 78 87 -66 936
1 millor 15 92 21 -77 1380

哈哈,以上就是pandas关于调整列的顺序以及新增列的用法

补充:pandas修改DataFrame中的列名&调整列的顺序

修改列名:

直接调用接口:

df.rename()

看一下接口中的定义:

 def rename(self, *args, **kwargs):
  """
  Alter axes labels.
  Function / dict values must be unique (1-to-1). Labels not contained in
  a dict / Series will be left as-is. Extra labels listed don't throw an
  error.
  See the :ref:`user guide <basics.rename>` for more.
  Parameters
  ----------
  mapper, index, columns : dict-like or function, optional
   dict-like or functions transformations to apply to
   that axis' values. Use either ``mapper`` and ``axis`` to
   specify the axis to target with ``mapper``, or ``index`` and
   ``columns``.
  axis : int or str, optional
   Axis to target with ``mapper``. Can be either the axis name
   ('index', 'columns') or number (0, 1). The default is 'index'.
  copy : boolean, default True
   Also copy underlying data
  inplace : boolean, default False
   Whether to return a new DataFrame. If True then value of copy is
   ignored.
  level : int or level name, default None
   In case of a MultiIndex, only rename labels in the specified
   level.
  Returns
  -------
  renamed : DataFrame
  See Also
  --------
  pandas.DataFrame.rename_axis
  Examples
  --------
  ``DataFrame.rename`` supports two calling conventions
  * ``(index=index_mapper, columns=columns_mapper, ...)``
  * ``(mapper, axis={'index', 'columns'}, ...)``
  We *highly* recommend using keyword arguments to clarify your
  intent.
  >>> df = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]})
  >>> df.rename(index=str, columns={"A": "a", "B": "c"})
   a c
  0 1 4
  1 2 5
  2 3 6

  >>> df.rename(index=str, columns={"A": "a", "C": "c"})
   a B
  0 1 4
  1 2 5
  2 3 6

  Using axis-style parameters

  >>> df.rename(str.lower, axis='columns')
   a b
  0 1 4
  1 2 5
  2 3 6

  >>> df.rename({1: 2, 2: 4}, axis='index')
   A B
  0 1 4
  2 2 5
  4 3 6
  """
  axes = validate_axis_style_args(self, args, kwargs, 'mapper', 'rename')
  kwargs.update(axes)
  # Pop these, since the values are in `kwargs` under different names
  kwargs.pop('axis', None)
  kwargs.pop('mapper', None)
  return super(DataFrame, self).rename(**kwargs)

注意:

一个*,输入可以是数组、元组,会把输入的数组或元组拆分成一个个元素。

两个*,输入必须是字典格式

示例:

>>>import pandas as pd
>>>a = pd.DataFrame({'A':[1,2,3], 'B':[4,5,6], 'C':[7,8,9]})
>>> a
 A B C
0 1 4 7
1 2 5 8
2 3 6 9 

#将列名A替换为列名a,B改为b,C改为c
>>>a.rename(columns={'A':'a', 'B':'b', 'C':'c'}, inplace = True)
>>>a
 a b c
0 1 4 7
1 2 5 8
2 3 6 9

调整列的顺序:

如:

>>> import pandas
>>> dict_a = {'user_id':['webbang','webbang','webbang'],'book_id':['3713327','4074636','26873486'],'rating':['4','4','4'],
'mark_date':['2017-03-07','2017-03-07','2017-03-07']}

>>> df = pandas.DataFrame(dict_a) # 从字典创建DataFrame
>>> df # 创建好的df列名默认按首字母顺序排序,和字典中的先后顺序并不一样,字典中'user_id','book_id','rating','mark_date'

 book_id mark_date rating user_id
0 3713327 2017-03-07 4 webbang
1 4074636 2017-03-07 4 webbang
2 26873486 2017-03-07 4 webbang

直接修改列名:

>>> df = df[['user_id','book_id','rating','mark_date']] # 调整列顺序为'user_id','book_id','rating','mark_date'
>>> df

 user_id book_id rating mark_date
0 webbang 3713327 4 2017-03-07
1 webbang 4074636 4 2017-03-07
2 webbang 26873486 4 2017-03-07

就可以了。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

时间: 2021-03-26

Pandas中DataFrame交换列顺序的方法实现

一.获取DataFrame列标签 import pandas as pd file_path = '/Users/Arithmetic/da-rnn-master/data/collectd67_power_after_test_smooth.csv' dataset = pd.read_csv(file_path) cols = list(dataset) ['ps_state-stopped', 'ps_state-running', 'ps_state-blocked', 'ps_stat

Python pandas.DataFrame调整列顺序及修改index名的方法

1. 从字典创建DataFrame >>> import pandas >>> dict_a = {'user_id':['webbang','webbang','webbang'],'book_id':['3713327','4074636','26873486'],'rating':['4','4','4'],'mark_date':['2017-03-07','2017-03-07','2017-03-07']} >>> df = pandas.

pandas 按照特定顺序输出的实现代码

df.groupby() 之后按照特定顺序输出,方便后续作图,或者跟其他df对比作图. ## 构造 pd.DataFrame patient_id = ['71835318256532', '87791375711', '66979212649388', '46569922967175', '998612492555522', '982293214194', '89981833848', '17912315786975', '4683495482494', '1484143378533', '5

pandas中的DataFrame按指定顺序输出所有列的方法

问题: 输出新建的DataFrame对象时,DataFrame中各列的显示顺序和DataFrame定义中的顺序不一致. 例如: import pandas as pd grades = [48,99,75,80,42,80,72,68,36,78] df = pd.DataFrame( {'ID': ["x%d" % r for r in range(10)], 'Gender' : ['F', 'M', 'F', 'M', 'F', 'M', 'F', 'M', 'M', 'M'],

pandas 颠倒列顺序的两种解决方案

在数据预处理过程中可能需要将列的顺序颠倒,有两种方法. import numpy as np import pandas as pd df = pd.DataFrame(np.array(range(20)).reshape(4,5)) print(df) 原始dataframe如下: 0 1 2 3 4 0 0 1 2 3 4 1 5 6 7 8 9 2 10 11 12 13 14 3 15 16 17 18 19 1. 方法一 手动设置列名列表,应用在dataframe中(适合列名比较少的

Json返回时间的格式中出现乱码问题的两种解决方案

前言:这段时间一直没有写博客,首先是我正在实现权限系列的绝色和操作的实现,因为这些东西在前面我们都已经说过了,所以我们就不重复的说这些了,那么我们知道,在我们使用Json返回数据的时候时间的格式一般都会变了,变成我们不认识的一些字符,那么当我们遇到这些问题的时候我们该怎么解决呢,今天我就来小说一下这个的解决方法. .发现问题 (1).正如我们在前言里面所说,我们在编写Json解析时间的时候会返回一些莫名其妙的东西,那么我们是如何解决这个问题的呢?我现在有两种方法可以解决这个问题,下面我们首先来说

IOS应用程序多语言本地化的两种解决方案

最近要对一款游戏进行多语言本地化,在网上找了一些方案,加上自己的一点点想法整理出一套方案和大家分享! 多语言在应用程序中一般有两种做法: 一.程序中提供给用户自己选择的机会: 二.根据当前用户当前移动设备的语言自动将我们的app切换对应语言. 第一种做法比较简单完全靠自己的发挥了,这里主要讲第二种做法,主要分一下几点: 本地化应用程序名称 本地化字符串 本地化图片 本地化其他文件 1.本地化应用程序名称 (1)点击"new file"然后在弹出窗口左侧选择iOS的resource项,在

将input file的选择的文件清空的两种解决方案

上传文件时,选择了文件后想清空文件路径,搜索了一下,用两种方法解决 复制代码 代码如下: <input type="file" id="fileupload" name="file" /> 第一种: 复制代码 代码如下: var obj = document.getElementById('fileupload') ; obj.select(); document.selection.clear(); 第二种: 复制代码 代码如下:

window.onload绑定多个事件的两种解决方案

前言 有些函数,必须在网页加载完毕后执行.比如:涉及DOM操作的. 网页加载完毕时会触发一个onload事件,将函数绑定到这个事件上即可. 复制代码 代码如下: window.onload = myFunction; 问题来了:如果需要同时绑定多个事件,该如何处理呢?有两种解决方法 方案一 创建一个匿名函数,来容纳需要绑定的多个事件,再讲这个匿名函数绑定到onload事件上 window.onload = function(){ firstFunction(); secondFunction()

sql server中批量插入与更新两种解决方案分享(asp.net)

若只是需要大批量插入数据使用bcp是最好的,若同时需要插入.删除.更新建议使用SqlDataAdapter我测试过有很高的效率,一般情况下这两种就满足需求了 bcp方式 复制代码 代码如下: /// <summary> /// 大批量插入数据(2000每批次) /// 已采用整体事物控制 /// </summary> /// <param name="connString">数据库链接字符串</param> /// <param n

asp.net中url地址传送中文参数时的两种解决方案

在Web.comfig中配置 是一样的: <globalization requestEncoding="gb2312" responseEncoding="gb2312"/> 页面Header部分也都有 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 真是奇怪, 只好用了笨办法: 写参数: 复制代码 代码如下

PHP中实现MySQL嵌套事务的两种解决方案

一.问题起源 在MySQL的官方文档中有明确的说明不支持嵌套事务: 复制代码 代码如下: Transactions cannot be nested. This is a consequence of the implicit commit performed for any current transaction when you issue a START TRANSACTION statement or one of its synonyms. 但是在我们开发一个复杂的系统时难免会无意中在

Javascript 文件夹选择框的两种解决方案

解决方案1: 调用windows 的shell,但会有安全问题. * browseFolder.js * 该文件定义了BrowseFolder()函数,它将提供一个文件夹选择对话框 * 以供用户实现对系统文件夹选择的功能 * 文件夹选择对话框起始目录由 * Shell.BrowseForFolder(WINDOW_HANDLE, Message, OPTIONS, strPath)函数 * 的strPath参数设置 * 例如:0x11--我的电脑 * 0 --桌面 * "c:\\"--

详解git仓库迁移的两种解决方案

Git仓库迁移而不丢失log的方法 要求能保留原先的commit记录,应该如何迁移呢? 同时,本地已经clone了原仓库,要配置成新的仓库地址,该如何修改呢? 注意:如果使用了代码审核工具Gerrit,那么在进行操作之前需要将Gerrit关掉,等成功恢复后再将Gerrit开户即可 1.使用git push --mirror 先了解一些git的基本参数介绍 git clone --bare GIT-CLONE(1) Git Manual GIT-CLONE(1) NAME git-clone -

sql server中批量插入与更新两种解决方案分享(存储过程)

1.游标方式 复制代码 代码如下: DECLARE @Data NVARCHAR(max) SET @Data='1,tanw,2,keenboy' --Id,Name DECLARE @dataItem NVARCHAR(100) DECLARE data_cursor CURSOR FOR (SELECT * FROM split(@Data,';')) OPEN data_cursor FETCH NEXT FROM data_cursor INTO @dataItem WHILE @@F