修改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)  # 图六

merge(...)