Python3 pandas basic operations

1 Overview

This blog post is mainly about some basic operations of Python3 Pandas.

2. Specific implementation

2.1 Generate DataFrame

"""
# 生成 DataFrame
"""
s = pd.Series([1, 2, 3, np.nan, 6])     # pd数据格式
print(s)
dates = pd.date_range('20230101', periods=6)
print(dates)
df = pd.DataFrame(np.random.rand(6, 4), index=dates, columns=['A', 'B', 'C', 'D'])  # 生成矩阵形式的数据表, 带名称
print(df)
df1 = pd.DataFrame(np.arange(12).reshape((3, 4)))   # DataFrame 默认名称
print(df1)
df2 = pd.DataFrame({
    
        # 字典形式定义 DataFrame
    'A':1,
    'B':pd.Timestamp('20230101'),
    'C':pd.Series(1, index=list(range(4)), dtype='float32'),
    'D':np.array([3]*4, dtype='int32'),
    'E':pd.Categorical(["test", "train", "test", "train"]),
    'F':'foo',
})
print(df2)  # 输出DataFrame数据
print(df2.dtypes)   # 输出数据类型
print(df2.index)    # 输出行名称 [0, 1, 2, 3]
print(df2.columns)   # 输出列名称 ['A', 'B', 'C', 'D', 'E', 'F']
print(df2.values)   # DataFrame 数值
print(df2.describe())   # 对 DataFrame 的描述, 包括均值, 标准差等
print(df2.T)    # 转置
print(df2.sort_index(axis=1, ascending=False))  # index 排序
print(df2.sort_values('E'))     # 值排序

2.2 Data selection


"""
## 数据选择
"""
dates = pd.date_range('20230101', periods=6)
df = pd.DataFrame(np.arange(24).reshape((6, 4)), index=dates, columns=['A', 'B', 'C', 'D'])     # 创建DataFrame
print(df)   # 输出数据表
print(df['A'])  # 输出名称为 A 的列
print(df.A)     # 输出名称为 A 的列
print(df[0:3])  # 输出0, 1, 2 共3行
print(df['20230102':'20230104'])    # 输出 2023-01-02 到 2023-01-04 行
## 按照标签选择: loc
print(df.loc['20230102'])   # 选择 20230102 行
print(df.loc[:, ['A', 'B']])    # 选择所有行, 特定列输出['A', 'B']
print(df.loc['20230102', ['A', 'B', 'C']])   # 输出特定行, 特定列的数据
## 按照位置选择: iloc
print(df.iloc[0])   # 第 0 行的数据
print(df.iloc[0, 1])    # 输出第 0 行, 第 1 位的数据
print(df.iloc[0:2, 1:4])    # 第 0 and 1 行, 1,2,3 列
print(df.iloc[[1, 3, 5], 1:3])  # 非连续筛选对应元素

2.3 Data modification


"""
## 数据修改
"""
dates = pd.date_range('20230101', periods=6)
df = pd.DataFrame(np.arange(24).reshape((6, 4)), index=dates, columns=['A', 'B', 'C', 'D'])     # 创建DataFrame
print(df)   # 输出数据表
df.iloc[0, 0] = 99  # 用位置修改值
print(df)
df.loc['20230101', 'B'] = 88    # 用索引修改值
print(df)
df.A[df.A > 4] = 0  #修改对应列, 对应条件的数值
print(df)
df.loc['20230101', ['B', 'C', 'D']] = 77    # 每行对应位置修改数值
print(df)
df['E'] = np.nan    # 增加 DataFrame 中的一列
print(df)
df['F'] = pd.DataFrame(np.array([1, 2, 3, 4, 5, 6]), index=dates)   # 按照 DataFrame 的格式增加新数据
print(df)

2.4 Missing data processing (NaN)


"""
## 丢失数据处理(NaN)
"""
dates = pd.date_range('20230101', periods=6)
df = pd.DataFrame(np.arange(24).reshape((6, 4)), index=dates, columns=['A', 'B', 'C', 'D'])     # 创建DataFrame
print(df)   # 输出数据表
df.iloc[0, 1] = np.nan
df.iloc[1, 2] = np.nan
print(df)
print(df.dropna(axis=0, how='any')) # 去掉包含 NaN 的行或者列 how = 'any''all'
print(df.fillna(value=99))  # 将 NaN 的位置填入对应的值
print(df.isnull())  # 检查 DataFrame 是否包含 NaN 数据
print(np.any(df.isnull()))  # 检查 DataFrame 是否包含 NaN 数据, 存在 NaN, 返回 True

2.5 Merge DataFrame-concat

"""
## 合并DataFrame-concat
"""
df1 = pd.DataFrame(np.ones((3, 4))*0, columns=['A', 'B', 'C', 'D'])
print(df1)
df2 = pd.DataFrame(np.ones((3, 4))*1, columns=['A', 'B', 'C', 'D'])
print(df2)
df3 = pd.DataFrame(np.ones((3, 4))*2, columns=['A', 'B', 'C', 'D'])
print(df3)
res = pd.concat([df1, df2, df3], axis=0, ignore_index=True) # 竖向合并, ignore_index忽略索引, 重新编号
print(res)
df1 = pd.DataFrame(np.ones((3, 4))*4, columns=['A', 'B', 'C', 'D'], index=[1, 2, 3])
print(df1)
df2 = pd.DataFrame(np.ones((3, 4))*5, columns=['B', 'C', 'D', 'E'], index=[2, 3, 4])
print(df2)
res = pd.concat([df1, df2], join='outer', ignore_index=True)     # 竖向直接合并, 全部保留, 缺失的数据用 NaN 填充
print(res)
res = pd.concat([df1, df2], join='inner', ignore_index=True)     # 竖向直接合并, 只保留共同的部分
print(res)
res = pd.concat([df1, df2], axis=1)     # 横向直接合并, 缺失部分的数据用 NaN 填充
print(res)
res = pd.concat([df1, df2], axis=1, join='inner')   # 横向合并共同部分, 去掉其他部分
print(res)

2.6 Merge DataFrame-merge

"""
## 合并DataFrame-merge
"""
left = pd.DataFrame({
    
    
    'key':['K0', 'K1', 'K2', 'K3'],
    'A':['A0', 'A1', 'A2', 'A3'],
    'B':['B0', 'B1', 'B2', 'B3'],
})
print(left)
right = pd.DataFrame({
    
    
    'key':['K0', 'K1', 'K2', 'K3'],
    'C':['C0', 'C1', 'C2', 'C3'],
    'D':['D0', 'D1', 'D2', 'D3'],
})
print(right)
res = pd.merge(left, right, on='key')   # 根据 'key' 合并
print(res)
res = pd.merge(left, right, left_index=True, right_index=True, how='outer')     # 根据 Index 合并
print(res)
left = pd.DataFrame({
    
    
    'key1':['K0', 'K0', 'K1', 'K2'],
    'key2':['K0', 'K1', 'K0', 'K1'],
    'A':['A0', 'A1', 'A2', 'A3'],
    'B':['B0', 'B1', 'B2', 'B3'],
})
print(left)
right = pd.DataFrame({
    
    
    'key1':['K0', 'K1', 'K1', 'K2'],
    'key2':['K0', 'K0', 'K0', 'K0'],
    'C':['C0', 'C1', 'C2', 'C3'],
    'D':['D0', 'D1', 'D2', 'D3'],
})
print(right)
res = pd.merge(left, right, on=['key1', 'key2'], how='inner')   # 合并共同的
print(res)
res = pd.merge(left, right, on=['key1', 'key2'], how='outer')   # 全部合并
print(res)
res = pd.merge(left, right, on=['key1', 'key2'], how='outer', indicator='True')   # indicator指示合并元素位置
print(res)
boys = pd.DataFrame({
    
    
    'k':['K0', 'K1', 'K2', 'K3'],
    'age':[11, 12, 13, 14],
})
girls = pd.DataFrame({
    
    
    'k':['K0', 'K1', 'K2', 'K3'],
    'age':[21, 22, 23, 24],
})
res = pd.merge(boys, girls, on='k', suffixes=['_boys', '_girls'], how='inner')  # 通过suffixes参数区别不同种类
print(res)


reference:

  1. [Don’t bother with Python] Numpy & Pandas (data processing tutorial)

Guess you like

Origin blog.csdn.net/wwt18811707971/article/details/128963795