展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

Pandas基础使用(三):合并/apply函数/筛选/删除

合并

s1 = pd.Series([1,2,3,4],index=['a','b','c','d'],name="列1")
s2 = pd.Series([5,6,7,8],index=['a','b','c','e'],name='列2')
print(s1)
print(s2)
output
a    1
b    2
c    3
d    4
Name: 列1, dtype: int64

a    5
b    6
c    7
e    8
Name: 列2, dtype: int64
# 默认,上下合并
s3 = pd.concat([s1,s2])
print(s3)
output
a    1
b    2
c    3
d    4
a    5
b    6
c    7
e    8
dtype: int64
# 左右合并 索引对齐
s3 = pd.concat([s1,s2],axis=1)
print(s3)
output
    列1   列2
a  1.0  5.0
b  2.0  6.0
c  3.0  7.0
d  4.0  NaN
e  NaN  8.0
dic1={
    "学号":[1,2,3,5],
    "姓名":['张三','李四','王五','赵六'],
    "班级":['一班','一班','一班','一班'],
    "成绩":[80,90,95,99]
}
dic2={
    "学号":[1,2,3,4],
    "姓名":['张三1','李四1','王五1','赵六1'],
    "班级":['二班','二班','二班','二班'],
    "成绩":[82,92,92,72],
    "成绩1":[82,92,92,72]
}
data1 = pd.DataFrame(dic1)
data2 = pd.DataFrame(dic2)
print(data1)
print(data2)
output
   学号  姓名  班级  成绩
0   1  张三  一班  80
1   2  李四  一班  90
2   3  王五  一班  95
3   5  赵六  一班  99

   学号   姓名  班级  成绩  成绩1
0   1  张三1  二班  82   82
1   2  李四1  二班  92   92
2   3  王五1  二班  92   92
3   4  赵六1  二班  72   72
# 上下合并两个班级的成绩,对齐的是列名
data3 = pd.concat([data1,data2],axis=0)
print(data3)
output
   学号   姓名  班级  成绩   成绩1
0   1   张三  一班  80   NaN
1   2   李四  一班  90   NaN
2   3   王五  一班  95   NaN
3   5   赵六  一班  99   NaN
0   1  张三1  二班  82  82.0
1   2  李四1  二班  92  92.0
2   3  王五1  二班  92  92.0
3   4  赵六1  二班  72  72.0
dic1={
    "学号":[1,2,3,4],
    "姓名":['张三','李四','王五','赵六'],
    "班级":['一班','一班','一班','一班'],
    "语文成绩":[80,90,95,99]
}
dic2={
    "学号":[1,2,3,5],
    "姓名":['张三','李四','王五','赵六'],
    "班级":['一班','一班','一班','一班'],
    "数学成绩":[82,92,92,72],
}
data1 = pd.DataFrame(dic1,index=dic1['学号'])
data2 = pd.DataFrame(dic2,index=dic2['学号'])
print(data1)
print(data2)
output
   学号  姓名  班级  语文成绩
1   1  张三  一班    80
2   2  李四  一班    90
3   3  王五  一班    95
4   4  赵六  一班    99

   学号  姓名  班级  数学成绩
1   1  张三  一班    82
2   2  李四  一班    92
3   3  王五  一班    92
5   5  赵六  一班    72
# 左右合并两个班级的成绩
data3 = pd.concat([data1,data2],axis=1)
print(data3)
output
    学号   姓名   班级  语文成绩   学号   姓名   班级  数学成绩
1  1.0   张三   一班  80.0  1.0   张三   一班  82.0
2  2.0   李四   一班  90.0  2.0   李四   一班  92.0
3  3.0   王五   一班  95.0  3.0   王五   一班  92.0
4  4.0   赵六   一班  99.0  NaN  NaN  NaN   NaN
5  NaN  NaN  NaN   NaN  5.0   赵六   一班  72.0
# inner左右合并,两个表都有的索引才会成立
data3 = pd.concat([data1,data2],axis=1,join="inner")
print(data3)
output
   学号  姓名  班级  语文成绩  学号  姓名  班级  数学成绩
1   1  张三  一班    80   1  张三  一班    82
2   2  李四  一班    90   2  李四  一班    92
3   3  王五  一班    95   3  王五  一班    92
# outer默认左右合并,外连接,两个表所有的数据都有
data3 = pd.concat([data1,data2],axis=1,join="outer")
print(data3)
output
    学号   姓名   班级  语文成绩   学号   姓名   班级  数学成绩
1  1.0   张三   一班  80.0  1.0   张三   一班  82.0
2  2.0   李四   一班  90.0  2.0   李四   一班  92.0
3  3.0   王五   一班  95.0  3.0   王五   一班  92.0
4  4.0   赵六   一班  99.0  NaN  NaN  NaN   NaN
5  NaN  NaN  NaN   NaN  5.0   赵六   一班  72.0
# data1的所有数据都有
data3 = pd.concat([data1,data2],axis=1).reindex(data1.index)
print(data3)
output
    学号  姓名  班级  语文成绩   学号   姓名   班级  数学成绩
1  1.0  张三  一班  80.0  1.0   张三   一班  82.0
2  2.0  李四  一班  90.0  2.0   李四   一班  92.0
3  3.0  王五  一班  95.0  3.0   王五   一班  92.0
4  4.0  赵六  一班  99.0  NaN  NaN  NaN   NaN
# data2的所有数据都有
data3 = pd.concat([data1,data2],axis=1).reindex(data2.index)
print(data3)
output
    学号   姓名   班级  语文成绩   学号  姓名  班级  数学成绩
1  1.0   张三   一班  80.0  1.0  张三  一班  82.0
2  2.0   李四   一班  90.0  2.0  李四  一班  92.0
3  3.0   王五   一班  95.0  3.0  王五  一班  92.0
5  NaN  NaN  NaN   NaN  5.0  赵六  一班  72.0

apply函数

path = r"C:\work\python\pandas_files\计算列.xlsx"
data = pd.read_excel(path)
print(data)
output
   序号 商品名称  单价  销售数量  销售金额
0   1   香蕉   5    20   NaN
1   2   苹果   6    15   NaN
2   3    梨   3    18   NaN
def hs(a):
    return len(a)
b = data['商品名称'].apply(hs)
print(b)
output
0    2
1    2
2    1
Name: 商品名称, dtype: int64
# 使用lambda表达式
b = data['商品名称'].apply(lambda a : len(a))
print(b)
output
0    2
1    2
2    1
Name: 商品名称, dtype: int64
# 调用内置函数
b = data['商品名称'].apply(len)
print(b)
output
0    2
1    2
2    1
Name: 商品名称, dtype: int64
# 将单价加5
b = data['单价'].apply(lambda a: a+5)
print(b)
output
0    10
1    11
2     8
Name: 单价, dtype: int64
# if-else 如果单价低于5的,加3
def hs1(a):
    if a < 5:
        return a+3
    else:
        return a
# 如果单价小于5,就将单价+3
data['单价'] = data['单价'].apply(hs1)
print(data)
output
   序号 商品名称  单价  销售数量  销售金额
0   1   香蕉   5    20   NaN
1   2   苹果   6    15   NaN
2   3    梨   6    18   NaN
# 使用lambda表达式
data['单价'] = data['单价'].apply(lambda a: a+3 if a<5 else a)
print(data)
output
   序号 商品名称  单价  销售数量  销售金额
0   1   香蕉   5    20   NaN
1   2   苹果   6    15   NaN
2   3    梨   6    18   NaN
# 计算销售金额
data['销售金额'] = data['单价'] * data['销售数量']
print(data)
output
   序号 商品名称  单价  销售数量  销售金额
0   1   香蕉   5    20   100
1   2   苹果   6    15    90
2   3    梨   6    18   108
# 单价大于5的就打9折
b = data['单价'].apply(lambda a: a*0.9 if a > 5 else a)
data['打折后的销售金额'] = b * data['销售数量']
print(data)
output
   序号 商品名称  单价  销售数量  销售金额  打折后的销售金额
0   1   香蕉   5    20   100     100.0
1   2   苹果   6    15    90      81.0
2   3    梨   6    18   108      97.2
# 计算两个日期的间隔
path = r"C:\work\python\pandas_files\计算日期.xlsx"
data = pd.read_excel(path,index_col='序号')
print(data)
output
         起始日期       结束日期
序号                      
1  2020-01-01 2020-01-08
2  2020-03-01 2020-09-07
3  2020-05-03 2020-08-08
4  2020-04-08 2020-11-08
5  2020-07-30 2021-09-03
data['日期差'] = (data['结束日期'] - data['起始日期'])
print(data)
output
         起始日期       结束日期      日期差
序号                               
1  2020-01-01 2020-01-08   7 days
2  2020-03-01 2020-09-07 190 days
3  2020-05-03 2020-08-08  97 days
4  2020-04-08 2020-11-08 214 days
5  2020-07-30 2021-09-03 400 days
data['日期差'] = data['日期差'].apply(lambda a : a.days)
print(data)
output
         起始日期       结束日期  日期差
序号                           
1  2020-01-01 2020-01-08    7
2  2020-03-01 2020-09-07  190
3  2020-05-03 2020-08-08   97
4  2020-04-08 2020-11-08  214
5  2020-07-30 2021-09-03  400

筛选

path = r"C:\work\python\pandas_files\筛选.xlsx"
data = pd.read_excel(path)
print(data)
output
   序号   姓名 性别       出生日期  语文  数学  英语   总分               地址
0   1  卢海军  男 1983-01-05  64  49  49  162     上海市某某区某某小区A座
1   2  丁智敏  女 1983-10-27  61  61  60  182     冀州市某某区某某小区a座
2   3  李平平  女 1994-01-07  58  49  33  140     襄阳市某某区某某小区c座
3   4   张伊  女 1987-02-06  69  44  58  171  河南省信阳市某某区某某小区C座
4   5   王刚  男 1989-07-08  37  63  42  142     信阳市某某区某某小区B座
5   6   王松  男 1987-03-06  47  44  62  153     襄阳市某某区某某小区F座
b = data.loc[2:5]
print(b)
output
   序号   姓名 性别       出生日期  语文  数学  英语   总分               地址
2   3  李平平  女 1994-01-07  58  49  33  140     襄阳市某某区某某小区c座
3   4   张伊  女 1987-02-06  69  44  58  171  河南省信阳市某某区某某小区C座
4   5   王刚  男 1989-07-08  37  63  42  142     信阳市某某区某某小区B座
5   6   王松  男 1987-03-06  47  44  62  153     襄阳市某某区某某小区F座
data.set_index('序号', inplace=True)
print(data)
output
     姓名 性别       出生日期  语文  数学  英语   总分               地址
序号                                                     
1   卢海军  男 1983-01-05  64  49  49  162     上海市某某区某某小区A座
2   丁智敏  女 1983-10-27  61  61  60  182     冀州市某某区某某小区a座
3   李平平  女 1994-01-07  58  49  33  140     襄阳市某某区某某小区c座
4    张伊  女 1987-02-06  69  44  58  171  河南省信阳市某某区某某小区C座
5    王刚  男 1989-07-08  37  63  42  142     信阳市某某区某某小区B座
6    王松  男 1987-03-06  47  44  62  153     襄阳市某某区某某小区F座
data1 = data[2:5]
print(data1)
output
     姓名 性别       出生日期  语文  数学  英语   总分               地址
序号                                                     
3   李平平  女 1994-01-07  58  49  33  140     襄阳市某某区某某小区c座
4    张伊  女 1987-02-06  69  44  58  171  河南省信阳市某某区某某小区C座
5    王刚  男 1989-07-08  37  63  42  142     信阳市某某区某某小区B座
data2 = data.loc[2:5]
print(data2)
output
     姓名 性别       出生日期  语文  数学  英语   总分               地址
序号                                                     
2   丁智敏  女 1983-10-27  61  61  60  182     冀州市某某区某某小区a座
3   李平平  女 1994-01-07  58  49  33  140     襄阳市某某区某某小区c座
4    张伊  女 1987-02-06  69  44  58  171  河南省信阳市某某区某某小区C座
5    王刚  男 1989-07-08  37  63  42  142     信阳市某某区某某小区B座
data = pd.read_excel(path, index_col='出生日期')
print(data)
output
            序号   姓名 性别  语文  数学  英语   总分               地址
出生日期                                                    
1983-01-05   1  卢海军  男  64  49  49  162     上海市某某区某某小区A座
1983-10-27   2  丁智敏  女  61  61  60  182     冀州市某某区某某小区a座
1994-01-07   3  李平平  女  58  49  33  140     襄阳市某某区某某小区c座
1987-02-06   4   张伊  女  69  44  58  171  河南省信阳市某某区某某小区C座
1989-07-08   5   王刚  男  37  63  42  142     信阳市某某区某某小区B座
1987-03-06   6   王松  男  47  44  62  153     襄阳市某某区某某小区F座
# 需要日期做索引,同时日期排序
data = data.sort_index()
print(data)
output
            序号   姓名 性别  语文  数学  英语   总分               地址
出生日期                                                    
1983-01-05   1  卢海军  男  64  49  49  162     上海市某某区某某小区A座
1983-10-27   2  丁智敏  女  61  61  60  182     冀州市某某区某某小区a座
1987-02-06   4   张伊  女  69  44  58  171  河南省信阳市某某区某某小区C座
1987-03-06   6   王松  男  47  44  62  153     襄阳市某某区某某小区F座
1989-07-08   5   王刚  男  37  63  42  142     信阳市某某区某某小区B座
1994-01-07   3  李平平  女  58  49  33  140     襄阳市某某区某某小区c座
b = data['1987-02-06':'1989-07-08']
print(b)
output
            序号  姓名 性别  语文  数学  英语   总分               地址
出生日期                                                   
1987-02-06   4  张伊  女  69  44  58  171  河南省信阳市某某区某某小区C座
1987-03-06   6  王松  男  47  44  62  153     襄阳市某某区某某小区F座
1989-07-08   5  王刚  男  37  63  42  142     信阳市某某区某某小区B座
b = data['1987':'1989']
print(b)
output
            序号  姓名 性别  语文  数学  英语   总分               地址
出生日期                                                   
1987-02-06   4  张伊  女  69  44  58  171  河南省信阳市某某区某某小区C座
1987-03-06   6  王松  男  47  44  62  153     襄阳市某某区某某小区F座
1989-07-08   5  王刚  男  37  63  42  142     信阳市某某区某某小区B座
b = data['1983':'1987']
print(b)
output
            序号   姓名 性别  语文  数学  英语   总分               地址
出生日期                                                    
1983-01-05   1  卢海军  男  64  49  49  162     上海市某某区某某小区A座
1983-10-27   2  丁智敏  女  61  61  60  182     冀州市某某区某某小区a座
1987-02-06   4   张伊  女  69  44  58  171  河南省信阳市某某区某某小区C座
1987-03-06   6   王松  男  47  44  62  153     襄阳市某某区某某小区F座
b = data['1983-10':'1987']
print(b)
output
            序号   姓名 性别  语文  数学  英语   总分               地址
出生日期                                                    
1983-10-27   2  丁智敏  女  61  61  60  182     冀州市某某区某某小区a座
1987-02-06   4   张伊  女  69  44  58  171  河南省信阳市某某区某某小区C座
1987-03-06   6   王松  男  47  44  62  153     襄阳市某某区某某小区F座
data = pd.read_excel(path, index_col='出生日期')
data.sort_index(inplace=True)
print(data)
output
            序号   姓名 性别  语文  数学  英语   总分               地址
出生日期                                                    
1983-01-05   1  卢海军  男  64  49  49  162     上海市某某区某某小区A座
1983-10-27   2  丁智敏  女  61  61  60  182     冀州市某某区某某小区a座
1987-02-06   4   张伊  女  69  44  58  171  河南省信阳市某某区某某小区C座
1987-03-06   6   王松  男  47  44  62  153     襄阳市某某区某某小区F座
1989-07-08   5   王刚  男  37  63  42  142     信阳市某某区某某小区B座
1994-01-07   3  李平平  女  58  49  33  140     襄阳市某某区某某小区c座
# 查询>=1987年的记录
data1 = data.truncate(before='1987-03')
print(data1)
output
            序号   姓名 性别  语文  数学  英语   总分            地址
出生日期                                                 
1987-03-06   6   王松  男  47  44  62  153  襄阳市某某区某某小区F座
1989-07-08   5   王刚  男  37  63  42  142  信阳市某某区某某小区B座
1994-01-07   3  李平平  女  58  49  33  140  襄阳市某某区某某小区c座
# 查询<1987年的记录
# data.truncate(after='1987') 
data1 = data['1987-03':]
print(data1)
output
            序号   姓名 性别  语文  数学  英语   总分            地址
出生日期                                                 
1987-03-06   6   王松  男  47  44  62  153  襄阳市某某区某某小区F座
1989-07-08   5   王刚  男  37  63  42  142  信阳市某某区某某小区B座
1994-01-07   3  李平平  女  58  49  33  140  襄阳市某某区某某小区c座
# 对具体查询某列值,就必须将这个列设置为索引列
# 查询性别是女的所有的记录
data = data.set_index("性别")
b = data.loc["女"]
print(b)
output
    序号   姓名  语文  数学  英语   总分               地址
性别                                           
女    2  丁智敏  61  61  60  182     冀州市某某区某某小区a座
女    4   张伊  69  44  58  171  河南省信阳市某某区某某小区C座
女    3  李平平  58  49  33  140     襄阳市某某区某某小区c座
# 查询女生的语文成绩
b = data.loc["女", '语文']
print(b)
output
性别
女    61
女    69
女    58
Name: 语文, dtype: int64
# 查询男生的语文和数学成绩
b = data.loc['男', ['语文', '数学']]
print(b)
output
    语文  数学
性别        
男   64  49
男   47  44
男   37  63
# 所有人的语文和数学
b = data.loc[:, ['语文', '数学']]
print(b)
output
    语文  数学
性别        
男   64  49
女   61  61
女   69  44
男   47  44
男   37  63
女   58  49
# 所有人的 姓名列到英语列
b = data.loc[:, '姓名':'英语']
print(b)
output
     姓名  语文  数学  英语
性别                 
男   卢海军  64  49  49
女   丁智敏  61  61  60
女    张伊  69  44  58
男    王松  47  44  62
男    王刚  37  63  42
女   李平平  58  49  33
# 显示性别为男的记录
b = data['性别'] == '男'
c = data.loc[b]
print(c)
output
            序号   姓名 性别  语文  数学  英语   总分            地址
出生日期                                                 
1983-01-05   1  卢海军  男  64  49  49  162  上海市某某区某某小区A座
1987-03-06   6   王松  男  47  44  62  153  襄阳市某某区某某小区F座
1989-07-08   5   王刚  男  37  63  42  142  信阳市某某区某某小区B座
# 查询语文成绩大于60的记录
b = data['语文'] > 60
c = data.loc[b]
print(c)
output
            序号   姓名 性别  语文  数学  英语   总分               地址
出生日期                                                    
1983-01-05   1  卢海军  男  64  49  49  162     上海市某某区某某小区A座
1983-10-27   2  丁智敏  女  61  61  60  182     冀州市某某区某某小区a座
1987-02-06   4   张伊  女  69  44  58  171  河南省信阳市某某区某某小区C座
# 查询语文成绩大于60并且数学成绩大于60
# 多条件的时候,每个条件都需要用()括起来
b = (data['语文'] > 60) & (data['数学'] > 60)
c = data[b]
print(c)
output
            序号   姓名 性别  语文  数学  英语   总分            地址
出生日期                                                 
1983-10-27   2  丁智敏  女  61  61  60  182  冀州市某某区某某小区a座
# 显示姓名包含平
b = data['姓名'].str.contains('平')
c = data.loc[b]
print(c)
output
            序号   姓名 性别  语文  数学  英语   总分            地址
出生日期                                                 
1994-01-07   3  李平平  女  58  49  33  140  襄阳市某某区某某小区c座
# 显示姓王
b = data['姓名'].str.startswith('王')
c = data.loc[b]
print(c)
output
            序号  姓名 性别  语文  数学  英语   总分            地址
出生日期                                                
1987-03-06   6  王松  男  47  44  62  153  襄阳市某某区某某小区F座
1989-07-08   5  王刚  男  37  63  42  142  信阳市某某区某某小区B座
# 性别为男的记录
data1 = data[data.性别 == '男'][['语文', '数学']]
print(data1)
output
    语文  数学
序号        
1   64  49
5   37  63
6   47  44
data = pd.read_excel(path)
print(data)
output
   序号   姓名 性别       出生日期  语文  数学  英语   总分               地址
0   1  卢海军  男 1983-01-05  64  49  49  162     上海市某某区某某小区A座
1   2  丁智敏  女 1983-10-27  61  61  60  182     冀州市某某区某某小区a座
2   3  李平平  女 1994-01-07  58  49  33  140     襄阳市某某区某某小区c座
3   4   张伊  女 1987-02-06  69  44  58  171  河南省信阳市某某区某某小区C座
4   5   王刚  男 1989-07-08  37  63  42  142     信阳市某某区某某小区B座
5   6   王松  男 1987-03-06  47  44  62  153     襄阳市某某区某某小区F座
# 通过条件新增加一列
# 方式1
b = data.性别 == '男'
data.loc[b, '称呼'] = '先生'
b = data.性别 == '女'
data.loc[b, '称呼'] = '女士'
print(data)
output
   序号   姓名 性别       出生日期  语文  数学  英语   总分               地址  称呼
0   1  卢海军  男 1983-01-05  64  49  49  162     上海市某某区某某小区A座  先生
1   2  丁智敏  女 1983-10-27  61  61  60  182     冀州市某某区某某小区a座  女士
2   3  李平平  女 1994-01-07  58  49  33  140     襄阳市某某区某某小区c座  女士
3   4   张伊  女 1987-02-06  69  44  58  171  河南省信阳市某某区某某小区C座  女士
4   5   王刚  男 1989-07-08  37  63  42  142     信阳市某某区某某小区B座  先生
5   6   王松  男 1987-03-06  47  44  62  153     襄阳市某某区某某小区F座  先生
# 方式2
data['称呼'] = data['性别'].apply(lambda a: '先生' if a == '男' else '女士')
print(data)
output
   序号   姓名 性别       出生日期  语文  数学  英语   总分               地址  称呼
0   1  卢海军  男 1983-01-05  64  49  49  162     上海市某某区某某小区A座  先生
1   2  丁智敏  女 1983-10-27  61  61  60  182     冀州市某某区某某小区a座  女士
2   3  李平平  女 1994-01-07  58  49  33  140     襄阳市某某区某某小区c座  女士
3   4   张伊  女 1987-02-06  69  44  58  171  河南省信阳市某某区某某小区C座  女士
4   5   王刚  男 1989-07-08  37  63  42  142     信阳市某某区某某小区B座  先生
5   6   王松  男 1987-03-06  47  44  62  153     襄阳市某某区某某小区F座  先生
# 使用query()函数做查询
# 查性别为男的记录
data1 = data.query("性别=='男'")
print(data1)
output
     姓名 性别       出生日期  语文  数学  英语   总分            地址  称呼
序号                                                      
1   卢海军  男 1983-01-05  64  49  49  162  上海市某某区某某小区A座  先生
5    王刚  男 1989-07-08  37  63  42  142  信阳市某某区某某小区B座  先生
6    王松  男 1987-03-06  47  44  62  153  襄阳市某某区某某小区F座  先生
# 语文大于60的记录
data1 = data.query("语文 > 60")
print(data1)
output
     姓名 性别       出生日期  语文  数学  英语   总分               地址  称呼
序号                                                         
1   卢海军  男 1983-01-05  64  49  49  162     上海市某某区某某小区A座  先生
2   丁智敏  女 1983-10-27  61  61  60  182     冀州市某某区某某小区a座  女士
4    张伊  女 1987-02-06  69  44  58  171  河南省信阳市某某区某某小区C座  女士
# 性别为男,并且语文大于60
# b = "性别 == '男' and 语文 > 60"
b = "性别 == '男' & 语文 > 60"
data1 = data.query(b)
print(data1)
output
     姓名 性别       出生日期  语文  数学  英语   总分            地址  称呼
序号                                                      
1   卢海军  男 1983-01-05  64  49  49  162  上海市某某区某某小区A座  先生
# 性别为男或者语文大于60
# b = "性别 == '男' or 语文 > 60"
b = "性别 == '男' | 语文 > 60"
data1 = data.query(b)
print(data1)
output
     姓名 性别       出生日期  语文  数学  英语   总分            地址  称呼
序号                                                      
1   卢海军  男 1983-01-05  64  49  49  162  上海市某某区某某小区A座  先生
# 查询姓名是王开头的
b = "姓名.str.startswith('王')"
data1 = data.query(b)
print(data1)
output
    姓名 性别       出生日期  语文  数学  英语   总分            地址  称呼
序号                                                     
5   王刚  男 1989-07-08  37  63  42  142  信阳市某某区某某小区B座  先生
6   王松  男 1987-03-06  47  44  62  153  襄阳市某某区某某小区F座  先生
# 姓名是王刚和李平平信息
# b = "姓名=='王刚' | 姓名=='李平平'"
b = "姓名 in ['王刚','李平平']"
data1 = data.query(b)
print(data1)
output
     姓名 性别       出生日期  语文  数学  英语   总分            地址  称呼
序号                                                      
3   李平平  女 1994-01-07  58  49  33  140  襄阳市某某区某某小区c座  女士
5    王刚  男 1989-07-08  37  63  42  142  信阳市某某区某某小区B座  先生

删除数据行

path = r"C:\work\python\pandas_files\删除.xlsx"
data = pd.read_excel(path)
print(data)
output
   序号   姓名    语文    数学    英语
0   1  丁智敏  35.0  57.0  43.0
1   2  李平平   NaN   NaN   NaN
2   3   王刚   NaN  67.0  55.0
3   4   王松  49.0  36.0  54.0
4   5  卢海军   NaN   NaN   NaN
5   6   张伊  38.0  56.0  36.0
6   7  张荣耀  51.0   NaN  65.0
7   8  王夏卓  35.0  51.0  43.0
8   9   杨赛  66.0  64.0  34.0
9  10  马志理  52.0  51.0  66.0
# 删除索引为2的行
data = data.drop(2)
print(data)
output
   序号   姓名    语文    数学    英语
0   1  丁智敏  35.0  57.0  43.0
1   2  李平平   NaN   NaN   NaN
3   4   王松  49.0  36.0  54.0
4   5  卢海军   NaN   NaN   NaN
5   6   张伊  38.0  56.0  36.0
6   7  张荣耀  51.0   NaN  65.0
7   8  王夏卓  35.0  51.0  43.0
8   9   杨赛  66.0  64.0  34.0
9  10  马志理  52.0  51.0  66.0
# 删除索引1和3的行数据
data = data.drop(labels=[1, 3])
print(data)
output
   序号   姓名    语文    数学    英语
0   1  丁智敏  35.0  57.0  43.0
2   3   王刚   NaN  67.0  55.0
4   5  卢海军   NaN   NaN   NaN
5   6   张伊  38.0  56.0  36.0
6   7  张荣耀  51.0   NaN  65.0
7   8  王夏卓  35.0  51.0  43.0
8   9   杨赛  66.0  64.0  34.0
9  10  马志理  52.0  51.0  66.0
# 删除语文列
data = data.drop('语文', axis=1)
print(data)
output
   序号   姓名    数学    英语
0   1  丁智敏  57.0  43.0
1   2  李平平   NaN   NaN
2   3   王刚  67.0  55.0
3   4   王松  36.0  54.0
4   5  卢海军   NaN   NaN
5   6   张伊  56.0  36.0
6   7  张荣耀   NaN  65.0
7   8  王夏卓  51.0  43.0
8   9   杨赛  64.0  34.0
9  10  马志理  51.0  66.0
# 删除语文\数学两列
data = data.drop(['语文', '数学'], axis=1)
print(data)
output
   序号   姓名    英语
0   1  丁智敏  43.0
1   2  李平平   NaN
2   3   王刚  55.0
3   4   王松  54.0
4   5  卢海军   NaN
5   6   张伊  36.0
6   7  张荣耀  65.0
7   8  王夏卓  43.0
8   9   杨赛  34.0
9  10  马志理  66.0

删除重复值

path = r"C:\work\python\pandas_files\去重.xlsx"
data = pd.read_excel(path)
print(data)
output
   序号   姓名 性别  分数
0   1   杨过  男  90
1   2   杨过  男  89
2   3  小龙女  女  93
3   4  小龙女  女  91
4   5  张三丰  男  88
5   6   郭靖  男  87
6   7   郭靖  男  90
7   8  张无忌  男  89
# 查看是否有重复值,获取重复的数量
data1 = data['姓名'].value_counts()
print(data1)
output
姓名
杨过     2
小龙女    2
郭靖     2
张三丰    1
张无忌    1
Name: count, dtype: int64
# 去除姓名列的重复值,保留第一个数据
data1 = data.drop_duplicates(subset='姓名')
print(data1)
output
   序号   姓名 性别  分数
0   1   杨过  男  90
2   3  小龙女  女  93
4   5  张三丰  男  88
5   6   郭靖  男  87
7   8  张无忌  男  89
# 按照姓名和性别去重
data1 = data.drop_duplicates(subset=['姓名', '性别'])
print(data1)
output
   序号   姓名 性别  分数
0   1   杨过  男  90
2   3  小龙女  女  93
4   5  张三丰  男  88
5   6   郭靖  男  87
7   8  张无忌  男  89
# 按照姓名去重后保留最后一个
data1 = data.drop_duplicates(subset='姓名', keep="last")
print(data1)
output
   序号   姓名 性别  分数
1   2   杨过  男  89
3   4  小龙女  女  91
4   5  张三丰  男  88
6   7   郭靖  男  90
7   8  张无忌  男  89
# 按照姓名去重,一个都不留
data1 = data.drop_duplicates(subset='姓名', keep=False)
print(data1)
output
   序号   姓名 性别  分数
4   5  张三丰  男  88
7   8  张无忌  男  89
# 取出重复值
# 重复的值显示为True,没有重复的显示为False
tj = data.duplicated(subset='姓名')
print(data[tj])
output
   序号   姓名 性别  分数
1   2   杨过  男  89
3   4  小龙女  女  91
6   7   郭靖  男  90
posted @ 2024-04-07 15:30  DogLeftover  阅读(104)  评论(0编辑  收藏  举报