原始数据:
import pandas as pd
import numpy as np
data = {'a': [4, 6, 5, 7, 8],
'b': ['w', 't', 'y', 'x', 'z'],
'c': [1, 0, 6, -5, 3],
'd': [3, 4, 7, 10, 8],
}
df = pd.DataFrame(data, index=['one', 'two', 'three', 'four', 'five'])
print(df)
# a b c d
# one 4 w 1 3
# two 6 t 0 4
# three 5 y 6 7
# four 7 x -5 10
# five 8 z 3 8
new_df = pd.DataFrame({'a': [1, 2, 3, 3, 4],
'b': [1, 2, 3, 3, 4],
'c': [22, 33, 22, 44, 66],
'd': [1, 2, 3, 3, 4]
},
index=['one', 'two', 'three', 'four', 'five'])
print(new_df)
# a b c d
# one 1 1 22 1
# two 2 2 33 2
# three 3 3 22 3
# four 3 3 44 3
# five 4 4 66 4
new_df['newcol'] = df['b']
print(new_df)
# a b c d newcol
# one 1 1 22 1 w
# two 2 2 33 2 t
# three 3 3 22 3 y
# four 3 3 44 3 x
# five 4 4 66 4 z
new_df['newcol'] = df.pop('b')
print(new_df)
# a b c d newcol
# one 1 1 22 1 w
# two 2 2 33 2 t
# three 3 3 22 3 y
# four 3 3 44 3 x
# five 4 4 66 4 z
new_df.insert(2, 'newcol', df['b'].values)
print(new_df)
# a b newcol c d
# one 1 1 w 22 1
# two 2 2 t 33 2
# three 3 3 y 22 3
# four 3 3 x 44 3
# five 4 4 z 66 4
DataFrame.insert(loc, column, value, allow_duplicates=False)
Parameters:
同:都可以实现将一个 DataFrame 中的一列,插入到另一个 DataFrame 中
异:方法一和方法二,必须保证两个 DataFrame 的 index 要相同,若不相同,则这一列对应的值为NaN,而且总是在末尾插入列。
而方法三没有这个限制,可以放在任意列,也不要求 index 相同
# 取出要插入的行
insertRow = df[1: 2]
# insertRow = df.iloc[2, :] # 切片操作,行取第二行,列取所有
# insertRow = df.iloc[2] # 第二行,返回位置索引为1,也就是第二行数据。位置索引,和列表索引类似,里面只能是数字
# insertRow = df.loc['two'] # 返回标签为‘two’的数据
print(insertRow)
# a b c d
# two 6 t 0 4
newData = new_df.append(insertRow)
print(newData)
# a b c d
# one 1 1 22 1
# two 2 2 33 2
# three 3 3 22 3
# four 3 3 44 3
# five 4 4 66 4
# two 6 t 0 4
# 将要插入的这一行的列名,要与被插入的DataFrame的列名相同,若不相同,则会增加某一的列,对应的值为NaN
# 先切割
above = new_df[:2]
print(above)
# a b c d
# one 1 1 22 1
# two 2 2 33 2
below = new_df[2:]
print(below)
# a b c d
# three 3 3 22 3
# four 3 3 44 3
# five 4 4 66 4
# 再拼接
newData = above.append(insertRow, ignore_index=True).append(below, ignore_index=True)
print(newData)
# a b c d
# 0 1 1 22 1
# 1 2 2 33 2
# 2 6 t 0 4
# 3 3 3 22 3
# 4 3 3 44 3
# 5 4 4 66 4
同:都可以实现将一个 DataFrame 中的一行,插入到另一个 DataFrame 中
异:方法一总是在末尾插入列。
而方法三没有这个限制,可以放在任意列