原始数据:
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
insert方法详解
(loc, column, value, allow_duplicates=False)
Parameters:
- loc : 参数column插入的位置,如果想插入到第一例则为0,取值范围: 0 <= loc <= len(columns),其中len(columns)为Dataframe的列数
- column :给 插入数据value取列名,可为数字,字符串等
- value : 可以是整数,Series或者数组等
- allow_duplicates : 默认 False。意为:如果插入的列已经存在,则抛出异常
三种方法的异同点:
同:都可以实现将一个 DataFrame 中的一列,插入到另一个 DataFrame 中
异:方法一和方法二,必须保证两个 DataFrame 的 index 要相同,若不相同,则这一列对应的值为NaN,而且总是在末尾插入列。
而方法三没有这个限制,可以放在任意列,也不要求 index 相同
插入行:
方法一:直接使用append
# 取出要插入的行
insertRow = df[1: 2]
# insertRow = [2, :] # 切片操作,行取第二行,列取所有
# insertRow = [2] # 第二行,返回位置索引为1,也就是第二行数据。位置索引,和列表索引类似,里面只能是数字
# insertRow = ['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中的列数对应且列名相同,思路:先切割,再拼接。
# 将要插入的这一行的列名,要与被插入的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 中
异:方法一总是在末尾插入列。
而方法三没有这个限制,可以放在任意列
loc和iloc的区别
- loc works on labels in the index.(说白了就是标签索引)
- iloc works on the positions in the index (so it only takes integers). (位置索引,和列表索引类似,里面只能是数字)