修改DataFrame
insert(...)
insert(self,
loc, # int 使用整数定义_列数据_插入的位置,必须是0到columns列标签的长度
column, # 可选字符串、数字或者object;列标签名
value, # 整数、Series或者数组型数据
allow_duplicates=False # 可选参数,如果dataframe中已经存在某列,将allow_duplicates置为true才可以将指定得列插入。
) -> None:
实战详解
############################
# DataFrame的拼接
############################
df1 = pd.DataFrame(
{
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']
},
index=[0, 1, 2, 3])
df2 = pd.DataFrame(
{
'A': ['A4', 'A5', 'A6', 'A7'],
'B': ['B4', 'B5', 'B6', 'B7'],
'C': ['C4', 'C5', 'C6', 'C7'],
'D': ['D4', 'D5', 'D6', 'D7']
},
index=[4, 5, 6, 7])
df3 = pd.DataFrame(
{
'A': ['A8', 'A9', 'A10', 'A11'],
'B': ['B8', 'B9', 'B10', 'B11'],
'C': ['C8', 'C9', 'C10', 'C11'],
'D': ['D8', 'D9', 'D10', 'D11']
},
index=[8, 9, 10, 11])
frames = [df1, df2, df3]
result = pd.concat(frames)
print(result)
'''
A B C D
0 A0 B0 C0 D0
1 A1 B1 C1 D1
2 A2 B2 C2 D2
3 A3 B3 C3 D3
4 A4 B4 C4 D4
5 A5 B5 C5 D5
6 A6 B6 C6 D6
7 A7 B7 C7 D7
8 A8 B8 C8 D8
9 A9 B9 C9 D9
10 A10 B10 C10 D10
11 A11 B11 C11 D11
'''
########################################
# keys参数,添加外层索引
########################################
result = pd.concat(frames, keys=['x', 'y', 'z'])
# result = pd.concat(frames, keys=['x', 'y']) # 少df3
# result = pd.concat(frames, keys=['x', 'y', 'z', 'w']) # 无影响
print(result)
'''
A B C D
x 0 A0 B0 C0 D0
1 A1 B1 C1 D1
2 A2 B2 C2 D2
3 A3 B3 C3 D3
y 4 A4 B4 C4 D4
5 A5 B5 C5 D5
6 A6 B6 C6 D6
7 A7 B7 C7 D7
z 8 A8 B8 C8 D8
9 A9 B9 C9 D9
10 A10 B10 C10 D10
11 A11 B11 C11 D11
'''
df4 = pd.DataFrame(
{
'B': ['B2', 'B3', 'B6', 'B7'],
'D': ['D2', 'D3', 'D6', 'D7'],
'F': ['F2', 'F3', 'F6', 'F7']
},
index=[2, 3, 6, 10])
result = pd.concat([df1, df4])
print(result)
'''
A B C D F
0 A0 B0 C0 D0 NaN
1 A1 B1 C1 D1 NaN
2 A2 B2 C2 D2 NaN
3 A3 B3 C3 D3 NaN
2 NaN B2 NaN D2 F2
3 NaN B3 NaN D3 F3
6 NaN B6 NaN D6 F6
7 NaN B7 NaN D7 F7
'''
##########################################
# axis参数,连接方式
##########################################
result = pd.concat([df1, df4], axis=1)
print(result)
'''
A B C D B D F
0 A0 B0 C0 D0 NaN NaN NaN
1 A1 B1 C1 D1 NaN NaN NaN
2 A2 B2 C2 D2 B2 D2 F2
3 A3 B3 C3 D3 B3 D3 F3
6 NaN NaN NaN NaN B6 D6 F6
10 NaN NaN NaN NaN B7 D7 F7
'''
####################################################
# join参数
# 'inner': 交集
# 'outer': 并集
####################################################
result = pd.concat([df1, df4], join='inner')
print(result)
'''
B D
0 B0 D0
1 B1 D1
2 B2 D2
3 B3 D3
2 B2 D2
3 B3 D3
6 B6 D6
10 B7 D7
'''
# ignore_index 在新版中该参数已经淘汰了
##############################################
# ingore_index的应用
#################################################
result = pd.concat([df1, df4], join='inner', ignore_index=True)
print(result)
'''
B D
0 B0 D0
1 B1 D1
2 B2 D2
3 B3 D3
4 B2 D2
5 B3 D3
6 B6 D6
7 B7 D7
'''
append(...)
追加DataFrame
本质调用的是contcat(...)
append(
self, other, ignore_index=False, verify_integrity=False, sort=False
) -> "DataFrame": pass
# 参数说明
# other:DataFrame、series、dict、list这样的数据结构
# ignore_index:默认值为False,如果为True则不使用index标签
# verify_integrity :默认值为False,如果为True当创建相同的index时会抛出ValueError的异常
# sort:boolean,默认是None,该属性在pandas的0.23.0的版本才存在。
#############################
# 第一种(追加DataFrame):(2, 2) (2, 1) -> (4, 3), 有值存值,无值存NaN
#############################
df = pd.DataFrame([[1, 2], [3, 4]], columns=list('AB'))
df1 = pd.DataFrame([[3], [5]], columns=list('C'))
df = df.append(df1, ignore_index=True)
print(df.shape)
print(df)
''' (4, 3)
A B C
0 1.0 2.0 NaN
1 3.0 4.0 NaN
2 NaN NaN 3.0
3 NaN NaN 5.0
'''
#############################
# 第二种(字典Dict):(4, 3) (5, 2) -> (9, 3), 有值存值,无值存NaN
#############################
for i in range(5):
df = df.append({'A': i, 'B': i+2}, ignore_index=True)
print(df)
''' (9, 3)
A B C
0 1.0 2.0 NaN
1 3.0 4.0 NaN
2 NaN NaN 3.0
3 NaN NaN 5.0
4 0.0 2.0 NaN
5 1.0 3.0 NaN
6 2.0 4.0 NaN
7 3.0 5.0 NaN
8 4.0 6.0 NaN
'''
#############################
# 第三种(concat拼接):有值存值,无值存NaN
#############################
df = pd.concat([pd.DataFrame([i], columns=['A']) for i in range(5)], ignore_index=True)
print(df)
'''
A
0 0
1 1
2 2
3 3
4 4
'''
#############################
# 第四种(追加Series):(5, 1) (1, 2) -> (6, 3)有值存值,无值存NaN
#############################
A x y
0 0.0 NaN NaN
1 1.0 NaN NaN
2 2.0 NaN NaN
3 3.0 NaN NaN
4 4.0 NaN NaN
a NaN 1.0 2.0
#############################
# 第五种(追加List,一维和二维):
# 一维:(0, 3) (1, 2) -> (1,)有值存值,无值存NaN
#############################
df = pd.DataFrame(columns=['a', 'b', 'c'])
df = df.append([[1, 2, 3], ['a', 'b', 'c']])
df = df.append([4, 5])
print(df)
'''
a b c 0 1 2
0 NaN NaN NaN 1 2 3
1 NaN NaN NaN a b c
0 NaN NaN NaN 4 NaN NaN
1 NaN NaN NaN 5 NaN NaN
# 追加交换位置
0 1 2 a b c
0 4 NaN NaN NaN NaN NaN
1 5 NaN NaN NaN NaN NaN
0 1 2 3 NaN NaN NaN
1 a b c NaN NaN NaN
'''
concat(...)
def concat(
objs: Union[Iterable[FrameOrSeries], Mapping[Label, FrameOrSeries]],
axis=0,
join="outer",
ignore_index: bool = False,
keys=None,
levels=None,
names=None,
verify_integrity: bool = False,
sort: bool = False,
copy: bool = True,
) -> FrameOrSeriesUnion: pass
# 参数说明
# objs:Series,DataFrame或Panel对象的序列或映射。如果传递了dict,则排序的键将用作键参数,除非它被传递,在这种情况下,将选择值(见下文)。任何无对象将被静默删除,除非它们都是无,在这种情况下将引发一个ValueError。
# axis:{0,1,...},默认为0。沿着连接的轴。
# join:{'inner','outer'},默认为“outer”。如何处理其他轴上的索引。outer为联合和inner为交集。
# ignore_index:boolean,default False。如果为True,请不要使用并置轴上的索引值。结果轴将被标记为0,...,n-1。如果要连接其中并置轴没有有意义的索引信息的对象,这将非常有用。注意,其他轴上的索引值在连接中仍然受到尊重。
# join_axes:Index对象列表。用于其他n-1轴的特定索引,而不是执行内部/外部设置逻辑。
# keys:序列,默认值无。使用传递的键作为最外层构建层次索引。如果为多索引,应该使用元组。
# levels:序列列表,默认值无。用于构建MultiIndex的特定级别(唯一值)。否则,它们将从键推断。
# names:list,default无。结果层次索引中的级别的名称。
# verify_integrity:boolean,default False。检查新连接的轴是否包含重复项。这相对于实际的数据串联可能是非常昂贵的。
# copy:boolean,default True。如果为False,请勿不必要地复制数据。
#################################################################
#################################################################
import pandas as pd
import numpy as np
############################
# DataFrame的拼接
############################
df1 = pd.DataFrame(
{
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']
},
index=[0, 1, 2, 3])
df2 = pd.DataFrame(
{
'A': ['A4', 'A5', 'A6', 'A7'],
'B': ['B4', 'B5', 'B6', 'B7'],
'C': ['C4', 'C5', 'C6', 'C7'],
'D': ['D4', 'D5', 'D6', 'D7']
},
index=[4, 5, 6, 7])
df3 = pd.DataFrame(
{
'A': ['A8', 'A9', 'A10', 'A11'],
'B': ['B8', 'B9', 'B10', 'B11'],
'C': ['C8', 'C9', 'C10', 'C11'],
'D': ['D8', 'D9', 'D10', 'D11']
},
index=[8, 9, 10, 11])
frames = [df1, df2, df3]
result = pd.concat(frames)
print(result) # 图一
##################################################
# 加入keys:序列,默认值无。使用传递的键作为最外层构建层次索引。如果为多索引,应该使用元组。
##################################################
result = pd.concat(frames, keys=['x', 'y', 'z', 'w'])
# result = pd.concat(frames, keys=['x', 'y']) # 少df3
# result = pd.concat(frames, keys=['x', 'y', 'z', 'w']) # 无影响
print(result) # 图二
##################################################
df4 = pd.DataFrame({'B': ['B2', 'B3', 'B6', 'B7'],
'D': ['D2', 'D3', 'D6', 'D7'],
'F': ['F2', 'F3', 'F6', 'F7']},
index=[2, 3, 6, 7])
result = pd.concat([df1, df4])
print(result) # 图三
##################################################
# axis参数
##################################################
result = pd.concat([df1, df4], axis=1)
print(result) # 图四
##################################################
# join参数
##################################################
result = pd.concat([df1, df4], join='inner')
print(result) # 图五
##################################################
# ignore_index参数
##################################################
result = pd.concat([df1, df4], join='inner', ignore_index=True)
print(result) # 图六