欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Pandas DataFrame實現(xiàn)任意位置插入一列或一行

 更新時間:2023年08月29日 14:38:07   作者:盛夏光年ltk  
Pandas是Python中最流行的數(shù)據(jù)處理和分析庫之一,在數(shù)據(jù)分析過程中,有時候需要在Dataframe中插入新的數(shù)據(jù)列,本文主要介紹了Pandas DataFrame實現(xiàn)任意位置插入一列或一行,具有一定的參考價值,感興趣的可以了解一下

新建DataFrame

import numpy as np
import pandas as pd
arr = [11, 12, 13, 21, 22, 23, 31, 32, 33, 41, 42, 43]
# 轉(zhuǎn)化為4行3列的numpy數(shù)組
np_arr = np.array(arr).reshape((4, 3))
# 轉(zhuǎn)化為DataFrame
pd_arr = pd.DataFrame(np_arr)

結(jié)果:

012
0111213
1212223
2313233
3414243

插入一列

任意位置插入一列比較簡單,用自帶的pd.insert即可實現(xiàn)

# 待插入列索引
col_n = 1
# 待插入數(shù)據(jù),以一維列表為例
d = ["*"] * 4
# 參數(shù):添加列索引,添加列名,添加數(shù)據(jù),是否允許列名重復(fù)
pd_arr.insert(col_n, "*", d, allow_duplicates=False)

結(jié)果:

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

插入一行

任意位置插入一行時自帶的pd.append無法實現(xiàn)(append只能在最后添加一行),需要先將原DataFrame拆分,添加新數(shù)據(jù)后再組合

# 待插入行索引
row_n = 1
# 待插入數(shù)據(jù),以一維列表為例
d = [["*"] * 4]
# 拆分
pd_arr1 = [:row_n]
pd_arr2 = [row_n:]
# 參數(shù):添加數(shù)據(jù),是否無視行索引
pd_arr = pd_arr1.append(d, ignore_index=True).append(pd_arr2, ignore_index=True)

結(jié)果:

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

可以將這幾行代碼整理成一個方法,以便于重復(fù)調(diào)用,如(以添加一維列表為例):

def df_insert(df, n, arr, ignore_index=True):
	"""
	DataFrame任意位置添加一行
	:param df: DataFrame
	:param n: 添加行號索引
	:param arr: 添加數(shù)據(jù)
	:param ignore_index: 是否無視行索引,為True則重新從0生成df的行號
	:return: DataFrame
	"""
	# 如果原df列名被修改,則需要給新插入的行也賦予列名
	# arr = pd.DataFrame(np.array(arr).reshape((1, len(arr))), columns=df.columns)
	# 否則直接插入二維數(shù)組即可
	arr = [arr]
	df1 = df[:n]
	df2 = df[n:]
	df0 = df1.append(arr, ignore_index).append(df2, ignore_index)
	return df0
# 待插入行索引
row_n = 1
# 待插入數(shù)據(jù),以一維列表為例
d = ["*"] * 4
# 調(diào)用方法
pd_arr = df_insert(pd_arr, row_n, d)

補充

用yield迭代DataFrame時插入新的行,迭代結(jié)果不受影響

def df_yield(df):
	# index=True時返回結(jié)果Pandas類型數(shù)據(jù)中將帶Index
	# 即 Pandas(Index=*, column_name=*, ...)
	for row in df.itertuples(index=False):
		yield row
y = df_yield(df_arr)
# 用try except StopIteration判斷迭代結(jié)束
y0 = next(y)
print("index 0 ", y0)
# index 0 插入新的數(shù)據(jù)
pd_arr = pd_insert(pd_arr, 0, ["*"] * 3)
y1 = next(y)
print("index 1 ", y1)

結(jié)果:

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

沒有受到新插入數(shù)據(jù)的影響

到此這篇關(guān)于Pandas DataFrame實現(xiàn)任意位置插入一列或一行的文章就介紹到這了,更多相關(guān)Pandas DataFrame任意位置插入內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論