【Pandas】DataFrame中任意位置插入一列或一行

本文介绍了如何在Pandas DataFrame中插入新的一行和一列,以及如何在迭代DataFrame时保持数据更新。通过df_insert函数,演示了在指定位置插入数据,并展示了yield迭代下数据不受影响的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

新建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)

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

### 回答1: 你可以使用 `df.loc[len(df)] = new_row` 在 dataframe 的末尾插入新行。 例如: ``` import pandas as pd # 建立示例 dataframe df = pd.DataFrame([[1, 2], [3, 4]], columns=['a', 'b']) print(df) # a b # 0 1 2 # 1 3 4 # 准备新行数据 new_row = [5, 6] # 在 dataframe 的末尾插入新行 df.loc[len(df)] = new_row print(df) # a b # 0 1 2 # 1 3 4 # 2 5 6 ``` 注意:如果你想在 dataframe任意位置插入新行,你可以使用类似 `df.loc[row_index] = new_row` 的语法。 ### 回答2: 在Python中,我们可以使用pandas库来添加新的行到一个DataFrame中。 要向DataFrame中添加一行,可以使用`DataFrame.append()`函数。这个函数可以将一行数据添加到DataFrame的末尾,并返回一个新的DataFrame。 以下是一个示例代码,展示如何向一个DataFrame中添加新的行: ```python import pandas as pd # 创建一个空的DataFrame df = pd.DataFrame(columns=['姓名', '年龄', '城市']) # 创建一个字典,包含新的行数据 new_row = {'姓名': '张三', '年龄': 25, '城市': '北京'} # 使用append函数将新行添加到DataFrame中 df = df.append(new_row, ignore_index=True) # 输出新的DataFrame print(df) ``` 上述代码中,首先创建了一个空的DataFrame,并指定了列的名称。接下来,创建一个新的字典`new_row`,包含要添加的新行的数据。然后,使用`append()`函数将新行数据添加到DataFrame中,并将返回的新DataFrame赋值给原始的变量`df`。最后,输出新的DataFrame。 运行以上代码,输出结果如下: ``` 姓名 年龄 城市 0 张三 25 北京 ``` 可以看到,新的行已经成功地被添加到了DataFrame中。 ### 回答3: 在Python中,我们可以使用pandas库操作dataframe来添加一行数据。首先,我们需要创建一个包含新数据的字典一个包含新数据的Series。然后,可以使用`append()`函数将新数据添加到dataframe中。 以下是一个示例代码: ```python import pandas as pd # 创建一个空的dataframe df = pd.DataFrame() # 创建一个包含新数据的字典 new_data = {'Name': 'Alice', 'Age': 25} # 将新数据添加到dataframe中 df = df.append(new_data, ignore_index=True) # 打印最终的dataframe print(df) ``` 在上述示例中,我们首先创建了一个空的dataframe `df`。然后,我们创建了一个包含新数据的字典`new_data`,其中包含姓名和年龄。接下来,我们使用`append()`函数将新数据添加到dataframe中,通过设置`ignore_index=True`参数,可以重新索引dataframe的行号。最后,我们打印出最终的dataframe。 通过以上的步骤,我们就可以向一个dataframe中添加新的一行数据了。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值