Python数据分析复习整理(Pandas)

Pandas

1.Series

Series是一种一维数组

import pandas as pd
# 通过列表创建Series
list1 = [1,-2,3,-4]
obj = pd.Series(list1)
obj
0    1
1   -2
2    3
3   -4
dtype: int64
# 创建Series时指定索引
index = ["a","b","c","d"]
values = [2,5,7,8]
obj = pd.Series(values,index=index,name='指定索引')
obj
a    2
b    5
c    7
d    8
Name: 指定索引, dtype: int64
# 通过字典创建Series
dict1 = {'张三':2000,'李四':800,'王五':30,'刘六':500}
obj = pd.Series(dict1)
obj
张三    2000
李四     800
王五      30
刘六     500
dtype: int64
# 通过字典创建Series
data = {'张三':2000,'李四':800,'王五':30,'刘六':500}
index = ['张三','李四','王五','刘六','张三一']
# 索引不匹配时自动nan补全
obj = pd.Series(dict1,index=index)
obj
张三     2000.0
李四      800.0
王五       30.0
刘六      500.0
张三一       NaN
dtype: float64
values = [2,5,7,8]
obj = pd.Series(values)
# 修改索引
obj.index = ["a","b","c","d"]
obj
a    2
b    5
c    7
d    8
dtype: int64

DataFrame

# 创建DataFrame
data = {
    'A':[2,3,5,2,3],
    'B':[5,0,2,3,6],
    'C':[8,7,50,8,2],
    'key':[3,4,5,2,2]
}
df = pd.DataFrame(data)
df
A B C key
0 2 5 8 3
1 3 0 7 4
2 5 2 50 5
3 2 3 8 2
4 3 6 2 2
# 进行列名排序
# columns函数指定列名
columns = ['C','B','A','key']
df = pd.DataFrame(data,columns=columns)
df
C B A key
0 8 5 2 3
1 7 0 3 4
2 50 2 5 5
3 8 3 2 2
4 2 6 3 2
df
C B A key
0 8 5 2 3
1 7 0 3 4
2 50 2 5 5
3 8 3 2 2
4 2 6 3 2
# 索引
# DataFrame的index不可修改
df.index
RangeIndex(start=0, stop=5, step=1)
# 列名
df.columns
Index(['C', 'B', 'A', 'key'], dtype='object')
df
C B A key
0 8 5 2 3
1 7 0 3 4
2 50 2 5 5
3 8 3 2 2
4 2 6 3 2
# 所有值
df.values
array([[ 8,  5,  2,  3],
       [ 7,  0,  3,  4],
       [50,  2,  5,  5],
       [ 8,  3,  2,  2],
       [ 2,  6,  3,  2]], dtype=int64)
# 所有列
df.columns
Index(['C', 'B', 'A', 'key'], dtype='object')
# 元素个数
df.size
20
# 元素的维度
df.ndim
2
# 元素的形状
df.shape
(5, 4)
data = pd.read_csv(r'D:\Desktop\大三第二学期\Python实训\数据\members.csv')
data
会员卡号 会员等级 注册时间 所属店铺编码 性别 生日 年齡 生命级别
0 BL6099033097969709934 黄金会员 2019-03-30 17:16:17.141 DPJ009 1988-12-20 30.0 活跃
1 BL6099033094943300594 白银会员 2019-03-30 14:14:38.576 DPJ009 1995-05-20 23.0 活跃
2 BL6099033099933500943 白银会员 2019-03-30 11:13:35.469 DPJ009 1990-09-05 28.0 沉睡
3 BL6099036369935609966 白银会员 2019-03-28 21:13:52.917 DPJ009 1971-07-23 47.0 沉睡
4 BL6099036393309900969 黄金会员 2019-03-28 18:30:19.672 DPJ009 1990-09-15 28.0 活跃
5 BL6099036395563900606 白银会员 2019-03-28 15:52:31.583 DPJ009 1980-06-04 38.0 沉睡
6 BL6099090903509300066 白银会员 2019-01-01 08:50:13.267 DPJ008 1969-12-19 49.0 沉睡
7 BL6093906999066500093 白银会员 2018-10-29 11:06:25.902 DPJ008 2000-02-27 19.0 沉睡
8 BL6093906395604900473 白银会员 2018-10-28 15:20:49.183 DPJ008 1969-10-26 49.0 沉睡
9 BL6093906793643300676 白银会员 2018-10-27 13:24:38.805 DPJ008 1989-11-04 29.0 沉睡
# 选取一列
w1 = data['会员等级']
w1
0    黄金会员
1    白银会员
2    白银会员
3    白银会员
4    黄金会员
5    白银会员
6    白银会员
7    白银会员
8    白银会员
9    白银会员
Name: 会员等级, dtype: object
# 选取多列
w1 = data[['会员等级','性别']]
w1
会员等级 性别
0 黄金会员
1 白银会员
2 白银会员
3 白银会员
4 黄金会员
5 白银会员
6 白银会员
7 白银会员
8 白银会员
9 白银会员
# 选取一行
data[1:2]
会员卡号 会员等级 注册时间 所属店铺编码 性别 生日 年齡 生命级别
1 BL6099033094943300594 白银会员 2019-03-30 14:14:38.576 DPJ009 1995-05-20 23.0 活跃
# 选取多行
data[1:5]
会员卡号 会员等级 注册时间 所属店铺编码 性别 生日 年齡 生命级别
1 BL6099033094943300594 白银会员 2019-03-30 14:14:38.576 DPJ009 1995-05-20 23.0 活跃
2 BL6099033099933500943 白银会员 2019-03-30 11:13:35.469 DPJ009 1990-09-05 28.0 沉睡
3 BL6099036369935609966 白银会员 2019-03-28 21:13:52.917 DPJ009 1971-07-23 47.0 沉睡
4 BL6099036393309900969 黄金会员 2019-03-28 18:30:19.672 DPJ009 1990-09-15 28.0 活跃
# 选取会员等级和性别两列
data.loc[:,['会员等级','性别']]
会员等级 性别
0 黄金会员
1 白银会员
2 白银会员
3 白银会员
4 黄金会员
5 白银会员
6 白银会员
7 白银会员
8 白银会员
9 白银会员
# 选取第1行和第3行的会员等级和性别两列
data.loc[[1,3],['会员等级','性别']]
会员等级 性别
1 白银会员
3 白银会员
# 选取第1行和第3行
data.loc[[1,3],:]
会员卡号 会员等级 注册时间 所属店铺编码 性别 生日 年齡 生命级别
1 BL6099033094943300594 白银会员 2019-03-30 14:14:38.576 DPJ009 1995-05-20 23.0 活跃
3 BL6099036369935609966 白银会员 2019-03-28 21:13:52.917 DPJ009 1971-07-23 47.0 沉睡
# 选取第1行和第3行
# 前闭后开区间
data.iloc[1:3,:]
会员卡号 会员等级 注册时间 所属店铺编码 性别 生日 年齡 生命级别
1 BL6099033094943300594 白银会员 2019-03-30 14:14:38.576 DPJ009 1995-05-20 23.0 活跃
2 BL6099033099933500943 白银会员 2019-03-30 11:13:35.469 DPJ009 1990-09-05 28.0 沉睡
# 选取第1行和第3行
# 前闭后闭区间
data.loc[1:3,:]
会员卡号 会员等级 注册时间 所属店铺编码 性别 生日 年齡 生命级别
1 BL6099033094943300594 白银会员 2019-03-30 14:14:38.576 DPJ009 1995-05-20 23.0 活跃
2 BL6099033099933500943 白银会员 2019-03-30 11:13:35.469 DPJ009 1990-09-05 28.0 沉睡
3 BL6099036369935609966 白银会员 2019-03-28 21:13:52.917 DPJ009 1971-07-23 47.0 沉睡
# 筛选女生
data[data['性别']=='女']
会员卡号 会员等级 注册时间 所属店铺编码 性别 生日 年齡 生命级别
1 BL6099033094943300594 白银会员 2019-03-30 14:14:38.576 DPJ009 1995-05-20 23.0 活跃
2 BL6099033099933500943 白银会员 2019-03-30 11:13:35.469 DPJ009 1990-09-05 28.0 沉睡
3 BL6099036369935609966 白银会员 2019-03-28 21:13:52.917 DPJ009 1971-07-23 47.0 沉睡
4 BL6099036393309900969 黄金会员 2019-03-28 18:30:19.672 DPJ009 1990-09-15 28.0 活跃
7 BL6093906999066500093 白银会员 2018-10-29 11:06:25.902 DPJ008 2000-02-27 19.0 沉睡
9 BL6093906793643300676 白银会员 2018-10-27 13:24:38.805 DPJ008 1989-11-04 29.0 沉睡
data
会员卡号 会员等级 注册时间 所属店铺编码 性别 生日 年齡 生命级别
0 BL6099033097969709934 黄金会员 2019-03-30 17:16:17.141 DPJ009 1988-12-20 30.0 活跃
1 BL6099033094943300594 白银会员 2019-03-30 14:14:38.576 DPJ009 1995-05-20 23.0 活跃
2 BL6099033099933500943 白银会员 2019-03-30 11:13:35.469 DPJ009 1990-09-05 28.0 沉睡
3 BL6099036369935609966 白银会员 2019-03-28 21:13:52.917 DPJ009 1971-07-23 47.0 沉睡
4 BL6099036393309900969 黄金会员 2019-03-28 18:30:19.672 DPJ009 1990-09-15 28.0 活跃
5 BL6099036395563900606 白银会员 2019-03-28 15:52:31.583 DPJ009 1980-06-04 38.0 沉睡
6 BL6099090903509300066 白银会员 2019-01-01 08:50:13.267 DPJ008 1969-12-19 49.0 沉睡
7 BL6093906999066500093 白银会员 2018-10-29 11:06:25.902 DPJ008 2000-02-27 19.0 沉睡
8 BL6093906395604900473 白银会员 2018-10-28 15:20:49.183 DPJ008 1969-10-26 49.0 沉睡
9 BL6093906793643300676 白银会员 2018-10-27 13:24:38.805 DPJ008 1989-11-04 29.0 沉睡
data = data.loc[:,['所属店铺编码','性别','生日','年齡']]
data
所属店铺编码 性别 生日 年齡
0 DPJ009 1988-12-20 30.0
1 DPJ009 1995-05-20 23.0
2 DPJ009 1990-09-05 28.0
3 DPJ009 1971-07-23 47.0
4 DPJ009 1990-09-15 28.0
5 DPJ009 1980-06-04 38.0
6 DPJ008 1969-12-19 49.0
7 DPJ008 2000-02-27 19.0
8 DPJ008 1969-10-26 49.0
9 DPJ008 1989-11-04 29.0
# 增加一行数据
data_add = {'所属店铺编码':'DPJ000','性别':'男','生日':'2000-11-11','年齡':'20.0'}
data = data.append(data_add,ignore_index=True)
所属店铺编码 性别 生日 年齡
0 DPJ009 1988-12-20 30
1 DPJ009 1995-05-20 23
2 DPJ009 1990-09-05 28
3 DPJ009 1971-07-23 47
4 DPJ009 1990-09-15 28
5 DPJ009 1980-06-04 38
6 DPJ008 1969-12-19 49
7 DPJ008 2000-02-27 19
8 DPJ008 1969-10-26 49
9 DPJ008 1989-11-04 29
10 DPJ000 2000-11-11 20.0
# 增加一列数据
data['学历'] = '本科'
data
所属店铺编码 性别 生日 年齡 学历
0 DPJ009 1988-12-20 30.0 本科
1 DPJ009 1995-05-20 23.0 本科
2 DPJ009 1990-09-05 28.0 本科
3 DPJ009 1971-07-23 47.0 本科
4 DPJ009 1990-09-15 28.0 本科
5 DPJ009 1980-06-04 38.0 本科
6 DPJ008 1969-12-19 49.0 本科
7 DPJ008 2000-02-27 19.0 本科
8 DPJ008 1969-10-26 49.0 本科
9 DPJ008 1989-11-04 29.0 本科
# 增加一列数据
data['薪资'] = [1000,200,3000,5000,10000,400,5000,6000,7555,8000]
data
所属店铺编码 性别 生日 年齡 学历 薪资
0 DPJ009 1988-12-20 30.0 本科 1000
1 DPJ009 1995-05-20 23.0 本科 200
2 DPJ009 1990-09-05 28.0 本科 3000
3 DPJ009 1971-07-23 47.0 本科 5000
4 DPJ009 1990-09-15 28.0 本科 10000
5 DPJ009 1980-06-04 38.0 本科 400
6 DPJ008 1969-12-19 49.0 本科 5000
7 DPJ008 2000-02-27 19.0 本科 6000
8 DPJ008 1969-10-26 49.0 本科 7555
9 DPJ008 1989-11-04 29.0 本科 8000
# 删除一行
data.drop(4,axis=0)
所属店铺编码 性别 生日 年齡 学历 薪资
0 DPJ009 1988-12-20 30.0 本科 1000
1 DPJ009 1995-05-20 23.0 本科 200
2 DPJ009 1990-09-05 28.0 本科 3000
3 DPJ009 1971-07-23 47.0 本科 5000
5 DPJ009 1980-06-04 38.0 本科 400
6 DPJ008 1969-12-19 49.0 本科 5000
7 DPJ008 2000-02-27 19.0 本科 6000
8 DPJ008 1969-10-26 49.0 本科 7555
9 DPJ008 1989-11-04 29.0 本科 8000
# 删除一行并保存
data.drop(5,axis=0,inplace=True)
data
所属店铺编码 性别 生日 年齡 学历 薪资
0 DPJ009 1988-12-20 30.0 本科 1000
1 DPJ009 1995-05-20 23.0 本科 200
2 DPJ009 1990-09-05 28.0 本科 3000
3 DPJ009 1971-07-23 47.0 本科 5000
6 DPJ008 1969-12-19 49.0 本科 5000
7 DPJ008 2000-02-27 19.0 本科 6000
8 DPJ008 1969-10-26 49.0 本科 7555
9 DPJ008 1989-11-04 29.0 本科 8000
# 删除一列并保存
data.drop('薪资',axis=1,inplace=True)
data
所属店铺编码 性别 生日 年齡 学历
0 DPJ009 1988-12-20 30.0 本科
1 DPJ009 1995-05-20 23.0 本科
2 DPJ009 1990-09-05 28.0 本科
3 DPJ009 1971-07-23 47.0 本科
6 DPJ008 1969-12-19 49.0 本科
7 DPJ008 2000-02-27 19.0 本科
8 DPJ008 1969-10-26 49.0 本科
9 DPJ008 1989-11-04 29.0 本科
# 对索引进行排序(ascending=False)为逆序
data.sort_index(ascending=False)
所属店铺编码 性别 生日 年齡 学历
9 DPJ008 1989-11-04 29.0 本科
8 DPJ008 1969-10-26 49.0 本科
7 DPJ008 2000-02-27 19.0 本科
6 DPJ008 1969-12-19 49.0 本科
3 DPJ009 1971-07-23 47.0 本科
2 DPJ009 1990-09-05 28.0 本科
1 DPJ009 1995-05-20 23.0 本科
0 DPJ009 1988-12-20 30.0 本科
# 对年齡进行排序
data.sort_values(by='年齡')
所属店铺编码 性别 生日 年齡 学历
7 DPJ008 2000-02-27 19.0 本科
1 DPJ009 1995-05-20 23.0 本科
2 DPJ009 1990-09-05 28.0 本科
9 DPJ008 1989-11-04 29.0 本科
0 DPJ009 1988-12-20 30.0 本科
3 DPJ009 1971-07-23 47.0 本科
6 DPJ008 1969-12-19 49.0 本科
8 DPJ008 1969-10-26 49.0 本科
df
C B A key
0 8 5 2 3
1 7 0 3 4
2 50 2 5 5
3 8 3 2 2
4 2 6 3 2
# 对每个数值型列进行统计
df.describe()
C B A key
count 5.000000 5.000000 5.000000 5.00000
mean 15.000000 3.200000 3.000000 3.20000
std 19.723083 2.387467 1.224745 1.30384
min 2.000000 0.000000 2.000000 2.00000
25% 7.000000 2.000000 2.000000 2.00000
50% 8.000000 3.000000 3.000000 3.00000
75% 8.000000 5.000000 3.000000 4.00000
max 50.000000 6.000000 5.000000 5.00000
# 对每列进行求和
df.sum()
C      75
B      16
A      15
key    16
dtype: int64
# 对每行进行求和
df.sum(axis=1)
0    18
1    14
2    62
3    15
4    13
dtype: int64
data
所属店铺编码 性别 生日 年齡 学历
0 DPJ009 1988-12-20 30.0 本科
1 DPJ009 1995-05-20 23.0 本科
2 DPJ009 1990-09-05 28.0 本科
3 DPJ009 1971-07-23 47.0 本科
6 DPJ008 1969-12-19 49.0 本科
7 DPJ008 2000-02-27 19.0 本科
8 DPJ008 1969-10-26 49.0 本科
9 DPJ008 1989-11-04 29.0 本科
# 对所属店铺编码列进行去重
data['所属店铺编码'].unique()
array(['DPJ009', 'DPJ008'], dtype=object)
# 对每个所属店铺编码进行计次统计
data['所属店铺编码'].value_counts()
DPJ009    4
DPJ008    4
Name: 所属店铺编码, dtype: int64
import pandas as pd
import numpy as np
df = pd.DataFrame({
    'key1':['a','b','a','b','b'],
    'key2':['yes','no','yes','yes','no'],
    'data1':np.arange(5),
    'data2':np.random.rand(5)
})
df
key1 key2 data1 data2
0 a yes 0 0.775070
1 b no 1 0.641297
2 a yes 2 0.076019
3 b yes 3 0.068691
4 b no 4 0.983585
# 按列名分组
df.groupby('key2').count()
key1 data1 data2
key2
no 2 2 2
yes 3 3 3
# 按列表或元组分析
wlist = ['w','w','y','w','w']
df.groupby(wlist).sum()
data1 data2
w 8 1.929771
y 2 0.937298
df
key1 key2 data1 data2
0 a yes 0 0.775070
1 b no 1 0.641297
2 a yes 2 0.076019
3 b yes 3 0.068691
4 b no 4 0.983585
wdict = {0:'one',1:'one',2:'two',3:'three',4:'two'}
df.groupby(wdict).count()
key1 key2 data1 data2
one 2 2 2 2
three 1 1 1 1
two 2 2 2 2
# 按函数分组
def fenzu(x):
    if x> 0.5:
        return 'a'
    else:
        return 'b'
df.groupby(df['data2'].map(fenzu)).count()
key1 key2 data1 data2
data2
a 3 3 3 3
b 2 2 2 2
# 数据聚合(对分组的数据进行计算,产生标量值的数据传递过程)
# 计数
df.groupby(df['data2'].map(fenzu)).count()
# 求和
df.groupby(df['data2'].map(fenzu)).sum()
# 均值
df.groupby(df['data2'].map(fenzu)).mean()
# 中位数
df.groupby(df['data2'].map(fenzu)).median()
# 标准差
df.groupby(df['data2'].map(fenzu)).std()
# 方差
df.groupby(df['data2'].map(fenzu)).var()
# 最小值
df.groupby(df['data2'].map(fenzu)).min()
# 最大值
df.groupby(df['data2'].map(fenzu)).max()
# 求积
df.groupby(df['data2'].map(fenzu)).prod()
# 第一个值
df.groupby(df['data2'].map(fenzu)).first()
# 最后一个值
df.groupby(df['data2'].map(fenzu)).last()
key1 key2 data1 data2
data2
a b no 4 0.983585
b b yes 3 0.068691
# agg聚合数据
df[['data1','data2']].agg([np.sum,np.mean,np.min])
data1 data2
sum 10.0 2.544661
mean 2.0 0.508932
amin 0.0 0.068691
# agg聚合数据
df.agg({'data1':np.sum,'data2':[np.mean,np.min]})
data1 data2
amin NaN 0.068691
mean NaN 0.508932
sum 10.0 NaN
# transform方法
df.groupby(['data2','data1'])['data1','data2'].transform('mean')
data1 data2
3 3 0.068691
0 0 0.775070
2 2 0.076019
4 4 0.983585
1 1 0.641297
```python import pandas as pd ```
members = pd.read_csv(r'D:\Desktop\大三第二学期\Python实训\数据\members.csv')
members
会员卡号 会员等级 注册时间 所属店铺编码 性别 生日 年齡 生命级别
0 BL6099033097969709934 黄金会员 2019-03-30 17:16:17.141 DPJ009 1988-12-20 30.0 活跃
1 BL6099033094943300594 白银会员 2019-03-30 14:14:38.576 DPJ009 1995-05-20 23.0 活跃
2 BL6099033099933500943 白银会员 2019-03-30 11:13:35.469 DPJ009 1990-09-05 28.0 沉睡
3 BL6099036369935609966 白银会员 2019-03-28 21:13:52.917 DPJ009 1971-07-23 47.0 沉睡
4 BL6099036393309900969 黄金会员 2019-03-28 18:30:19.672 DPJ009 1990-09-15 28.0 活跃
5 BL6099036395563900606 白银会员 2019-03-28 15:52:31.583 DPJ009 1980-06-04 38.0 沉睡
6 BL6099090903509300066 白银会员 2019-01-01 08:50:13.267 DPJ008 1969-12-19 49.0 沉睡
7 BL6093906999066500093 白银会员 2018-10-29 11:06:25.902 DPJ008 2000-02-27 19.0 沉睡
8 BL6093906395604900473 白银会员 2018-10-28 15:20:49.183 DPJ008 1969-10-26 49.0 沉睡
9 BL6093906793643300676 白银会员 2018-10-27 13:24:38.805 DPJ008 1989-11-04 29.0 沉睡
pd.crosstab(index=members['会员等级'],columns=members['性别'])
性别
会员等级
白银会员 5 3
黄金会员 1 1
pd.crosstab(index=members['会员等级'],columns=members['性别'],values=members['年齡'],aggfunc='mean')
性别
会员等级
白银会员 29.2 45.333333
黄金会员 28.0 30.000000

透视表

# 查看各等级会员的平均年龄
members.pivot_table(values='年齡',index='会员等级')
年齡
会员等级
白银会员 35.25
黄金会员 29.00
# 查看各等级每一个性别的平均年龄
members.pivot_table(values='年齡',index='会员等级',columns='性别')
性别
会员等级
白银会员 29.2 45.333333
黄金会员 28.0 30.000000
# 查看各店铺,各等级每一性别的平均年龄
members.pivot_table(values='年齡',index=['所属店铺编码','会员等级'],columns='性别')
性别
所属店铺编码 会员等级
DPJ008 白银会员 24.000000 49.0
DPJ009 白银会员 32.666667 38.0
黄金会员 28.000000 30.0
import pandas as pd
# 1.read_excel
orders = pd.read_excel(r'D:\Desktop\大三第二学期\Python实训\数据\会员消费报表.xlsx')
stores = pd.read_excel(r'D:\Desktop\大三第二学期\Python实训\数据\门店信息表.xlsx')
# 1.read_csv
orders = pd.read_csv(r'D:\Desktop\大三第二学期\Python实训\数据\会员消费报表.csv')
stores = pd.read_csv(r'D:\Desktop\大三第二学期\Python实训\数据\门店信息表.csv',usecols=['店铺代码', '地区编码'])
orders.head()
卡号 订单日期 订单号 订单类型 店铺代码 款号 尺码 消费数量 消费金额 当前积分
0 HS340766JAF6 2018-11-30 ODLOX6BXX8X2BXBBBBX 下单 DPX60X BLA267Q3X13AQM 230 1 1200.0 800
1 BL6093039999465603590 2018-11-30 ODODOXF77X8X2BXBBBB2 下单 DPX377 BLA2651QX14AQC 240 1 1332.0 2531
2 BL6093909593939600407 2018-11-30 ROX8XXFBBBB6BB 退单 DPS00X TMA27727X5QAQM 240 -1 -112.5 328
3 BL6093036096030709394 2018-11-30 ROX8XXFBBBB6X7 退单 DPS00X TMA67621X5QBQTM 230 -1 -60.0 1038
4 BL6093993066943700650 2018-11-30 ODLOX6BFX8XXFBBBBBX 下单 DPX603 BLA26663X52AQTM 235 1 1200.0 800
stores.head()
店铺代码 地区编码
0 DPX00X GBL6020
1 DPX002 GBL6020
2 DPX003 GBL6020
3 DPX004 GBL6020
4 DPX005 GBL6020
data = stores[0:10]
data
店铺代码 地区编码
0 DPX00X GBL6020
1 DPX002 GBL6020
2 DPX003 GBL6020
3 DPX004 GBL6020
4 DPX005 GBL6020
5 DPX006 GBL6020
6 DPX007 GBL6020
7 DPX008 GBL6020
8 DPX0X0 GBL6020
9 DPX0X2 GBL6020
# 导出为csv文件
data.to_csv('test.csv')
# 导出为Excel文件
data.to_excel('test.xlsx')
# merge函数
pd.merge(orders,stores,left_on='店铺代码',right_on='店铺代码')
卡号 订单日期 订单号 订单类型 店铺代码 款号 尺码 消费数量 消费金额 当前积分 地区编码
0 HS340766JAF6 2018-11-30 ODLOX6BXX8X2BXBBBBX 下单 DPX60X BLA267Q3X13AQM 230 1 1200.0 800 GBL6140
1 BL6093996469665709064 2018-11-28 ODROX6BXX8XX28BBBB2 退单 DPX60X BLA26725X13AQTM 235 -1 -1200.0 100 GBL6140
2 BL6093996469665709064 2018-11-28 ODLOX6BXX8XX28BBBBX 下单 DPX60X BLA26725X13AQTM 235 1 1200.0 900 GBL6140
3 BL6093996469665709064 2018-11-27 ODROX6BXX8XX29BBBBX 退单 DPX60X BLA26725X13AQTM 235 -1 -1200.0 900 GBL6140
4 BL6093996469665709064 2018-11-27 ODLOX6BXX8XX28BBBB2 下单 DPX60X BLA26725X13AQTM 235 1 1200.0 1700 GBL6140
... ... ... ... ... ... ... ... ... ... ... ...
203432 BL6093036060549503396 2019-01-12 ODLOX9B2X9BXX2BBBBX 下单 DPX902 BLA26516X1QAQG 235 1 1948.5 1633 GBL6070
203433 BL6099090969949400565 2019-01-09 ODLOX892X9BXB9BBBBX 下单 DPX892 BLA265Q4X11TMQQ 230 1 1153.5 869 GBL6130
203434 BL6093056769576003366 2019-01-08 ODODOX2B2X9BXB8BBBBX 下单 DPX202 BLAQ2112X6QBQQ 215 1 1198.5 899 GBL6090
203435 BL6093960694035600946 2019-01-01 ODLOX9BFX9BXBXBBBBX 下单 DPX903 TMB265L5X62N21 230 1 1198.5 1000 GBL6140
203436 BL6093960694035600946 2019-01-01 ODLOX9BFX9BXBXBBBBX 下单 DPX903 BLA27714X2QBQG 230 1 1500.0 1000 GBL6140

203437 rows × 11 columns

# merge函数,左连接
pd.merge(orders,stores,how='left')
卡号 订单日期 订单号 订单类型 店铺代码 款号 尺码 消费数量 消费金额 当前积分 地区编码
0 HS340766JAF6 2018-11-30 ODLOX6BXX8X2BXBBBBX 下单 DPX60X BLA267Q3X13AQM 230 1 1200.0 800 GBL6140
1 BL6093039999465603590 2018-11-30 ODODOXF77X8X2BXBBBB2 下单 DPX377 BLA2651QX14AQC 240 1 1332.0 2531 GBL6070
2 BL6093909593939600407 2018-11-30 ROX8XXFBBBB6BB 退单 DPS00X TMA27727X5QAQM 240 -1 -112.5 328 GBL6D01
3 BL6093036096030709394 2018-11-30 ROX8XXFBBBB6X7 退单 DPS00X TMA67621X5QBQTM 230 -1 -60.0 1038 GBL6D01
4 BL6093993066943700650 2018-11-30 ODLOX6BFX8XXFBBBBBX 下单 DPX603 BLA26663X52AQTM 235 1 1200.0 800 GBL6140
... ... ... ... ... ... ... ... ... ... ... ...
203432 BL6093969594069900955 2019-01-01 ODROX68BX9BXBXBBBBX 退单 DPX680 BL44P7QXQ1XXA 230 -1 -1.5 0 GBL6110
203433 BL6093969594069900955 2019-01-01 ODROX68BX9BXBXBBBBX 退单 DPX680 BLA26766X5QC3TM 235 -1 -1707.0 0 GBL6110
203434 BL6099090990995900030 2019-01-01 ODLOX68BX9BXBXBBBBF 下单 DPX680 BLA26663X56BQTM 235 1 1011.0 337 GBL6110
203435 BL6099090909590300063 2019-01-01 ODLOX22XX9BXBXBBBBF 下单 DPX22X BLA27522X16AQTM 235 1 1032.0 344 GBL6050
203436 BL6099090909343700065 2019-01-01 ODLOX225X9BXBXBBBBX 下单 DPX225 BLA26517X11CQM 235 1 598.5 0 GBL6050

203437 rows × 11 columns

# merge函数,右链接
pd.merge(orders,stores,how='right')
卡号 订单日期 订单号 订单类型 店铺代码 款号 尺码 消费数量 消费金额 当前积分 地区编码
0 HS340766JAF6 2018-11-30 ODLOX6BXX8X2BXBBBBX 下单 DPX60X BLA267Q3X13AQM 230.0 1.0 1200.0 800.0 GBL6140
1 BL6093996469665709064 2018-11-28 ODROX6BXX8XX28BBBB2 退单 DPX60X BLA26725X13AQTM 235.0 -1.0 -1200.0 100.0 GBL6140
2 BL6093996469665709064 2018-11-28 ODLOX6BXX8XX28BBBBX 下单 DPX60X BLA26725X13AQTM 235.0 1.0 1200.0 900.0 GBL6140
3 BL6093996469665709064 2018-11-27 ODROX6BXX8XX29BBBBX 退单 DPX60X BLA26725X13AQTM 235.0 -1.0 -1200.0 900.0 GBL6140
4 BL6093996469665709064 2018-11-27 ODLOX6BXX8XX28BBBB2 下单 DPX60X BLA26725X13AQTM 235.0 1.0 1200.0 1700.0 GBL6140
... ... ... ... ... ... ... ... ... ... ... ...
203580 NaN NaN NaN NaN DPJ030 NaN NaN NaN NaN NaN GBL6080
203581 NaN NaN NaN NaN DPJ033 NaN NaN NaN NaN NaN GBL6110
203582 NaN NaN NaN NaN DPJ034 NaN NaN NaN NaN NaN GBL6010
203583 NaN NaN NaN NaN DPJ036 NaN NaN NaN NaN NaN GBL6120
203584 NaN NaN NaN NaN DPJ04X NaN NaN NaN NaN NaN GBL6070

203585 rows × 11 columns

# concat数据连接
# 连接两个Series
s1 = pd.Series([0,1],index=['a','b'])
s2 = pd.Series([0,1,3],index=['e','d','c'])
s3 = pd.Series([0,2],index=['a','e'])
pd.concat([s1,s2,s3])
a    0
b    1
e    0
d    1
c    3
a    0
e    2
dtype: int64
# 连接两个DataFrame
data1 = orders[0:10]
data2 = stores[0:5]
data = pd.concat([data1,data2])
data
卡号 订单日期 订单号 订单类型 店铺代码 款号 尺码 消费数量 消费金额 当前积分 地区编码
0 HS340766JAF6 2018-11-30 ODLOX6BXX8X2BXBBBBX 下单 DPX60X BLA267Q3X13AQM 230.0 1.0 1200.0 800.0 NaN
1 BL6093039999465603590 2018-11-30 ODODOXF77X8X2BXBBBB2 下单 DPX377 BLA2651QX14AQC 240.0 1.0 1332.0 2531.0 NaN
2 BL6093909593939600407 2018-11-30 ROX8XXFBBBB6BB 退单 DPS00X TMA27727X5QAQM 240.0 -1.0 -112.5 328.0 NaN
3 BL6093036096030709394 2018-11-30 ROX8XXFBBBB6X7 退单 DPS00X TMA67621X5QBQTM 230.0 -1.0 -60.0 1038.0 NaN
4 BL6093993066943700650 2018-11-30 ODLOX6BFX8XXFBBBBBX 下单 DPX603 BLA26663X52AQTM 235.0 1.0 1200.0 800.0 NaN
5 BL6093993066063900639 2018-11-30 ODLOX78MX8XXFBBBBB6 下单 DPX784 BLA26515X1QBQQ 230.0 1.0 598.5 899.0 NaN
6 BL6093993066063900639 2018-11-30 ODLOX78MX8XXFBBBBB6 下单 DPX784 BLA26524X13AQS 225.0 1.0 898.5 899.0 NaN
7 BL6093993066000900635 2018-11-30 ODLOX78MX8XXFBBBBB5 下单 DPX784 BLA265Q3X13AQM 235.0 1.0 1050.0 700.0 NaN
8 BL6093049960399909703 2018-11-30 ODLOXM8BX8XXFBBBBB6 下单 DPX480 BLA67712X15BQTM 235.0 1.0 598.5 930.0 NaN
9 BL6093049960399909703 2018-11-30 ODLOXM8BX8XXFBBBBB6 下单 DPX480 BLA26663X5QAQTM 235.0 1.0 1050.0 930.0 NaN
0 NaN NaN NaN NaN DPX00X NaN NaN NaN NaN NaN GBL6020
1 NaN NaN NaN NaN DPX002 NaN NaN NaN NaN NaN GBL6020
2 NaN NaN NaN NaN DPX003 NaN NaN NaN NaN NaN GBL6020
3 NaN NaN NaN NaN DPX004 NaN NaN NaN NaN NaN GBL6020
4 NaN NaN NaN NaN DPX005 NaN NaN NaN NaN NaN GBL6020
# 检测缺失值
data.isnull()
卡号 订单日期 订单号 订单类型 店铺代码 款号 尺码 消费数量 消费金额 当前积分 地区编码
0 False False False False False False False False False False True
1 False False False False False False False False False False True
2 False False False False False False False False False False True
3 False False False False False False False False False False True
4 False False False False False False False False False False True
5 False False False False False False False False False False True
6 False False False False False False False False False False True
7 False False False False False False False False False False True
8 False False False False False False False False False False True
9 False False False False False False False False False False True
0 True True True True False True True True True True False
1 True True True True False True True True True True False
2 True True True True False True True True True True False
3 True True True True False True True True True True False
4 True True True True False True True True True True False
# 缺失值统计
data.isnull().sum()
卡号       5
订单日期     5
订单号      5
订单类型     5
店铺代码     0
款号       5
尺码       5
消费数量     5
消费金额     5
当前积分     5
地区编码    10
dtype: int64
# 检测非缺失值
data.notnull()
卡号 订单日期 订单号 订单类型 店铺代码 款号 尺码 消费数量 消费金额 当前积分 地区编码
0 True True True True True True True True True True False
1 True True True True True True True True True True False
2 True True True True True True True True True True False
3 True True True True True True True True True True False
4 True True True True True True True True True True False
5 True True True True True True True True True True False
6 True True True True True True True True True True False
7 True True True True True True True True True True False
8 True True True True True True True True True True False
9 True True True True True True True True True True False
0 False False False False True False False False False False True
1 False False False False True False False False False False True
2 False False False False True False False False False False True
3 False False False False True False False False False False True
4 False False False False True False False False False False True
# 删除缺失值
data1 = data.dropna()
data1
卡号 订单日期 订单号 订单类型 店铺代码 款号 尺码 消费数量 消费金额 当前积分 地区编码
# 用fillna填充缺失值
data2 = data.fillna(0)
data2
卡号 订单日期 订单号 订单类型 店铺代码 款号 尺码 消费数量 消费金额 当前积分 地区编码
0 HS340766JAF6 2018-11-30 ODLOX6BXX8X2BXBBBBX 下单 DPX60X BLA267Q3X13AQM 230.0 1.0 1200.0 800.0 0
1 BL6093039999465603590 2018-11-30 ODODOXF77X8X2BXBBBB2 下单 DPX377 BLA2651QX14AQC 240.0 1.0 1332.0 2531.0 0
2 BL6093909593939600407 2018-11-30 ROX8XXFBBBB6BB 退单 DPS00X TMA27727X5QAQM 240.0 -1.0 -112.5 328.0 0
3 BL6093036096030709394 2018-11-30 ROX8XXFBBBB6X7 退单 DPS00X TMA67621X5QBQTM 230.0 -1.0 -60.0 1038.0 0
4 BL6093993066943700650 2018-11-30 ODLOX6BFX8XXFBBBBBX 下单 DPX603 BLA26663X52AQTM 235.0 1.0 1200.0 800.0 0
5 BL6093993066063900639 2018-11-30 ODLOX78MX8XXFBBBBB6 下单 DPX784 BLA26515X1QBQQ 230.0 1.0 598.5 899.0 0
6 BL6093993066063900639 2018-11-30 ODLOX78MX8XXFBBBBB6 下单 DPX784 BLA26524X13AQS 225.0 1.0 898.5 899.0 0
7 BL6093993066000900635 2018-11-30 ODLOX78MX8XXFBBBBB5 下单 DPX784 BLA265Q3X13AQM 235.0 1.0 1050.0 700.0 0
8 BL6093049960399909703 2018-11-30 ODLOXM8BX8XXFBBBBB6 下单 DPX480 BLA67712X15BQTM 235.0 1.0 598.5 930.0 0
9 BL6093049960399909703 2018-11-30 ODLOXM8BX8XXFBBBBB6 下单 DPX480 BLA26663X5QAQTM 235.0 1.0 1050.0 930.0 0
0 0 0 0 0 DPX00X 0 0.0 0.0 0.0 0.0 GBL6020
1 0 0 0 0 DPX002 0 0.0 0.0 0.0 0.0 GBL6020
2 0 0 0 0 DPX003 0 0.0 0.0 0.0 0.0 GBL6020
3 0 0 0 0 DPX004 0 0.0 0.0 0.0 0.0 GBL6020
4 0 0 0 0 DPX005 0 0.0 0.0 0.0 0.0 GBL6020
# 用duplicates删除卡号
data2.drop_duplicates()
卡号 订单日期 订单号 订单类型 店铺代码 款号 尺码 消费数量 消费金额 当前积分 地区编码
0 HS340766JAF6 2018-11-30 ODLOX6BXX8X2BXBBBBX 下单 DPX60X BLA267Q3X13AQM 230.0 1.0 1200.0 800.0 0
1 BL6093039999465603590 2018-11-30 ODODOXF77X8X2BXBBBB2 下单 DPX377 BLA2651QX14AQC 240.0 1.0 1332.0 2531.0 0
2 BL6093909593939600407 2018-11-30 ROX8XXFBBBB6BB 退单 DPS00X TMA27727X5QAQM 240.0 -1.0 -112.5 328.0 0
3 BL6093036096030709394 2018-11-30 ROX8XXFBBBB6X7 退单 DPS00X TMA67621X5QBQTM 230.0 -1.0 -60.0 1038.0 0
4 BL6093993066943700650 2018-11-30 ODLOX6BFX8XXFBBBBBX 下单 DPX603 BLA26663X52AQTM 235.0 1.0 1200.0 800.0 0
5 BL6093993066063900639 2018-11-30 ODLOX78MX8XXFBBBBB6 下单 DPX784 BLA26515X1QBQQ 230.0 1.0 598.5 899.0 0
6 BL6093993066063900639 2018-11-30 ODLOX78MX8XXFBBBBB6 下单 DPX784 BLA26524X13AQS 225.0 1.0 898.5 899.0 0
7 BL6093993066000900635 2018-11-30 ODLOX78MX8XXFBBBBB5 下单 DPX784 BLA265Q3X13AQM 235.0 1.0 1050.0 700.0 0
8 BL6093049960399909703 2018-11-30 ODLOXM8BX8XXFBBBBB6 下单 DPX480 BLA67712X15BQTM 235.0 1.0 598.5 930.0 0
9 BL6093049960399909703 2018-11-30 ODLOXM8BX8XXFBBBBB6 下单 DPX480 BLA26663X5QAQTM 235.0 1.0 1050.0 930.0 0
0 0 0 0 0 DPX00X 0 0.0 0.0 0.0 0.0 GBL6020
1 0 0 0 0 DPX002 0 0.0 0.0 0.0 0.0 GBL6020
2 0 0 0 0 DPX003 0 0.0 0.0 0.0 0.0 GBL6020
3 0 0 0 0 DPX004 0 0.0 0.0 0.0 0.0 GBL6020
4 0 0 0 0 DPX005 0 0.0 0.0 0.0 0.0 GBL6020
# 用duplicates进行去重
data2['卡号'].drop_duplicates()
0             HS340766JAF6
1    BL6093039999465603590
2    BL6093909593939600407
3    BL6093036096030709394
4    BL6093993066943700650
5    BL6093993066063900639
7    BL6093993066000900635
8    BL6093049960399909703
0                        0
Name: 卡号, dtype: object

猜你喜欢

转载自blog.csdn.net/qq_29537269/article/details/107216458