Pandas DataFrame实现任意位置插入一列或一行

 更新时间:2023年08月29日 14:38:07   作者:盛夏光年ltk  
Pandas是Python中最流行的数据处理和分析库之一,在数据分析过程中,有时候需要在Dataframe中插入新的数据列,本文主要介绍了Pandas DataFrame实现任意位置插入一列或一行,具有一定的参考价值,感兴趣的可以了解一下

新建DataFrame

import numpy as np
import pandas as pd
arr = [11, 12, 13, 21, 22, 23, 31, 32, 33, 41, 42, 43]
# 转化为4行3列的numpy数组
np_arr = np.array(arr).reshape((4, 3))
# 转化为DataFrame
pd_arr = pd.DataFrame(np_arr)

结果:

012
0111213
1212223
2313233
3414243

插入一列

任意位置插入一列比较简单,用自带的pd.insert即可实现

# 待插入列索引
col_n = 1
# 待插入数据,以一维列表为例
d = ["*"] * 4
# 参数:添加列索引,添加列名,添加数据,是否允许列名重复
pd_arr.insert(col_n, "*", d, allow_duplicates=False)

结果:

0*12
011*1213
121*2223
231*3233
341*4243

插入一行

任意位置插入一行时自带的pd.append无法实现(append只能在最后添加一行),需要先将原DataFrame拆分,添加新数据后再组合

# 待插入行索引
row_n = 1
# 待插入数据,以一维列表为例
d = [["*"] * 4]
# 拆分
pd_arr1 = [:row_n]
pd_arr2 = [row_n:]
# 参数:添加数据,是否无视行索引
pd_arr = pd_arr1.append(d, ignore_index=True).append(pd_arr2, ignore_index=True)

结果:

0*12
011*1213
1****
221*2223
331*3233
441*4243

可以将这几行代码整理成一个方法,以便于重复调用,如(以添加一维列表为例):

def df_insert(df, n, arr, ignore_index=True):
	"""
	DataFrame任意位置添加一行
	:param df: DataFrame
	:param n: 添加行号索引
	:param arr: 添加数据
	:param ignore_index: 是否无视行索引,为True则重新从0生成df的行号
	:return: DataFrame
	"""
	# 如果原df列名被修改,则需要给新插入的行也赋予列名
	# arr = pd.DataFrame(np.array(arr).reshape((1, len(arr))), columns=df.columns)
	# 否则直接插入二维数组即可
	arr = [arr]
	df1 = df[:n]
	df2 = df[n:]
	df0 = df1.append(arr, ignore_index).append(df2, ignore_index)
	return df0
# 待插入行索引
row_n = 1
# 待插入数据,以一维列表为例
d = ["*"] * 4
# 调用方法
pd_arr = df_insert(pd_arr, row_n, d)

补充

用yield迭代DataFrame时插入新的行,迭代结果不受影响

def df_yield(df):
	# index=True时返回结果Pandas类型数据中将带Index
	# 即 Pandas(Index=*, column_name=*, ...)
	for row in df.itertuples(index=False):
		yield row
y = df_yield(df_arr)
# 用try except StopIteration判断迭代结束
y0 = next(y)
print("index 0 ", y0)
# index 0 插入新的数据
pd_arr = pd_insert(pd_arr, 0, ["*"] * 3)
y1 = next(y)
print("index 1 ", y1)

结果:

index 0 Pandas(_0=11, _1=12, _2=13)
index 1 Pandas(_0=21, _1=22, _2=23)

没有受到新插入数据的影响

到此这篇关于Pandas DataFrame实现任意位置插入一列或一行的文章就介绍到这了,更多相关Pandas DataFrame任意位置插入内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mac安装pytorch及系统的numpy更新方法

    mac安装pytorch及系统的numpy更新方法

    今天小编就为大家分享一篇mac安装pytorch及系统的numpy更新方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • 如何用Python 实现全连接神经网络(Multi-layer Perceptron)

    如何用Python 实现全连接神经网络(Multi-layer Perceptron)

    这篇文章主要介绍了如何用Python 实现全连接神经网络(Multi-layer Perceptron),帮助大家更好的进行机器学习,感兴趣的朋友可以了解下
    2020-10-10
  • Python练习之读取XML节点和属性值的方法

    Python练习之读取XML节点和属性值的方法

    这篇文章主要介绍了Python练习之读取XML节点和属性值的方法,通过parse函数可以读取XML文档,该函数返回ElementTree类型的对象,通过该对象的iterfind方法可以对XML中特定节点进行迭代
    2022-06-06
  • Python使用functools实现注解同步方法

    Python使用functools实现注解同步方法

    这篇文章主要介绍了Python使用functools实现注解同步方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-02-02
  • 详解如何用TensorFlow训练和识别/分类自定义图片

    详解如何用TensorFlow训练和识别/分类自定义图片

    这篇文章主要介绍了详解如何用TensorFlow训练和识别/分类自定义图片,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • 利用python画一颗心的方法示例

    利用python画一颗心的方法示例

    最近工作中要用到python的统计和绘图功能,无意间搜索到了这个,还挺有意思的。就分享给大家,下面这篇文章主要介绍了利用python画一颗心的方法示例,需要的朋友可以参考借鉴,一起来看看吧。
    2017-01-01
  • Python函数中的作用域规则详解

    Python函数中的作用域规则详解

    这篇文章主要为大家详细介绍了Python的作用域规则,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • 解决windows下命令行执行python3失效,会打开应用商店问题

    解决windows下命令行执行python3失效,会打开应用商店问题

    这篇文章主要介绍了解决windows下命令行执行python3失效,会打开应用商店问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • Python基础之getpass模块详细介绍

    Python基础之getpass模块详细介绍

    最近在看Python标准库官方文档的时候偶然发现了这个模块。仔细一看内容挺少的,只有两个主要api,就花了点时间阅读了一下源码,感觉挺实用的,在这安利给大家。下面这篇文章主要给大家介绍了关于Python基础之getpass模块的相关资料,需要的朋友可以参考下。
    2017-08-08
  • 利用django创建一个简易的博客网站的示例

    利用django创建一个简易的博客网站的示例

    这篇文章主要介绍了利用django创建一个简易的博客网站的示例,帮助大家更好的学习和使用django框架,感兴趣的朋友可以了解下
    2020-09-09

最新评论