文章目录

  • 更换数值
  • 新增
  • where条件
  • 空值查询
  • 分组
  • 连接 Join Union
  • 重命名
  • TopN
  • 去重

更换数值

import pandas as pd
df1 = pd.DataFrame([['Snow','M',22],['Tyrion','M',32],['Sansa','F',18],['Arya','F',14]], columns=['name','gender','age'])print("--------更换单个值----------")
# loc和iloc 可以更换单行、单列、多行、多列的值
df1.loc[0,'age']=25      # 思路:先用loc找到要更改的值,再用赋值(=)的方法实现更换值
df1.iloc[0,2]=25         # iloc:用索引位置来查找# at 、iat只能更换单个值
df1.at[0,'age']=25      # iat 用来取某个单值,参数只能用数字索引
df1.iat[0,2]=25         # at 用来取某个单值,参数只能用index和columns索引名称
print(df1)

新增

import pandas as pddf1 = pd.DataFrame([['Snow','M',22],['Tyrion','M',32],['Sansa','F',18],['Arya','F',14]], columns=['name','gender','age'])# 在数据框最后加上score一列,元素值分别为:80,98,67,90
df1['score']=[80,98,67,90]   # 增加列的元素个数要跟原数据列的个数一样
print(df1)print("---------在指定位置新增列:用insert()--------")
# 在gender后面加一列城市
# 在具体某个位置插入一列可以用insert的方法
# 语法格式:列表.insert(index, obj)
# index --->对象 obj 需要插入的索引位置。
# obj ---> 要插入列表中的对象(列名)col_name=df1.columns.tolist()                   # 将数据框的列名全部提取出来存放在列表里
print(col_name)col_name.insert(2,'city')                      # 在列索引为2的位置插入一列,列名为:city,刚插入时不会有值,整列都是NaN
df1=df1.reindex(columns=col_name)              # DataFrame.reindex() 对原行/列索引重新构建索引值df1['city']=['北京','山西','湖北','澳门']   # 给city列赋值
print(df1)print("----------新增行---------------")
# 重要!!先创建一个DataFrame,用来增加进数据框的最后一行
new=pd.DataFrame({'name':'lisa','gender':'F','city':'北京','age':19,'score':100},index=[1])   # 自定义索引为:1 ,这里也可以不设置index
print(new)print("-------在原数据框df1最后一行新增一行,用append方法------------")
df1=df1.append(new,ignore_index=True)   # ignore_index=True,表示不按原来的索引,从0开始自动递增
print(df1)

where条件


# where中有多个条件,要注意两个条件如果是and用&,且条件要用小括号包裹一下
# select * from df where Sun > 0 and Mon < 0 order by Sun desc;
df[(df['Sun'] > 0) & (df['Mon'] < 0)].sort_values('Sun',ascending=False)# or条件,在DataFrame中使用的是按位或符号:|
# sql: select * from df where Sun > 1 or Set > 1 order by Sun;
df[(df['Sun'] > 1) | (df['Set'] >1)].sort_values('Sun',ascending=False)

空值查询

.isna() .notna()

# 先构造一个带空置的DataFrame
dfna = pd.DataFrame({"one":pd.Series([1,2,3,np.NaN,5,6]),"two":pd.Series([1,2,np.NaN,5,6,np.NaN]),"three":pd.Series([np.NaN,5,6,np.NaN,7,8]),
})# 查询three列不是空值的全部数据
# SQL:select * from dfna where three is not null;
dfna[dfna['three'].notna()]
'''one   two three
1   2.0 2.0 5.0
2   3.0 NaN 6.0
4   5.0 6.0 7.0
5   6.0 NaN 8.0
'''
# 查询表中three是空值的全部列
# SQL:select * from dfna where three is null;
dfna[dfna['three'].isna()]
'''one   two three
0   1.0 1.0 NaN
3   NaN 5.0 NaN
'''

分组

# 人员基本信息表
fdf = pd.DataFrame({"name":pd.Series(['Zero','Zoey','Bella','Kat','Sid']),"age":pd.Series([23,24,23,26,23]),"gender":pd.Series(['male','female','female','female','male']),"address":pd.Series(['jinan','nanjing','qingdao','dongjing','dongjing']),"salary":pd.Series([8888.8,6666.6,1234.5,2345.6,5678.9])
})# 按性别分组,求出男女的平均工资
fdf.groupby('gender').mean()['salary']
'''
gender
female    3415.566667
male      7283.850000
Name: salary, dtype: float64
'''#求出男女人数
fdf.groupby('gender').size()
'''
gender
female    3
male      2
dtype: int64
'''# 分组后对不同列进行不同类型的聚合
# 按照gender进行分组,对salary求平均值,对age求总数
fdf.groupby('gender').agg({'salary':np.mean, 'age':np.size})
'''salary        age
gender
female  3415.566667  3
male    7283.850000  2
'''

连接 Join Union

DataFrame可以使用join()和merge()两种函数进行join操作
union操作使用concat()进行完成

# 创建两个待join的表
df1 = pd.DataFrame({"key":['A','B','C','D','E'],"val":np.random.randn(5)
})
df2 = pd.DataFrame({"key":['C','B','F','H','D'],"val":pd.Series(np.random.randn(5))
})# 根据key列进行join操作,内连接
df1.merge(df2,on='key')
# 右外连接
df1.merge(df2, on='key', how='right')
# 左外连接
df1.merge(df2, on='key', how='left')
# 全外连接
df2.merge(df2, on='key', how='outer')
# 全外,上面的全外不是真的全外,要用这种方式才能做到全外连接
pd.merge(df1, df2, on='key',how='outer')# 合并两个DataFrame并去重
pd.concat([df1, df2]).drop_duplicates()
'''
key val
0   A   -0.309694
1   B   1.455732
2   C   0.436620
3   D   0.970044
4   E   -0.689002
0   C   0.405784
1   B   -0.522076
2   F   0.147848
3   H   -1.609153
4   D   1.205187
'''

重命名

df.agg({'g_name': lambda x: len(x.tolist())}).rename({'g_name': 'g_num'}, axis=1)

TopN

sort_valuse(),参数by后跟列名,ascending跟True/False指定排序顺序,跟据多列排序时也可以写为 test.sort_valuse( by = [‘A’,‘B’], ascending = [False, True])

df.nlargest(3,columns='Sun')
df.nsmallest(3,columns='Sun')# 这里也是top N,但是是基于分组的top N
# assign是添加一列
# 添加的列叫rn
# sort_values是对salary进行排序
# groupby是对gender进行分组
# cumcount是按照上面给定的顺序从0开始给一个顺序号fdf.assign(rn=fdf.sort_values(['salary'], ascending=False).groupby(['gender']).cumcount()+1
).sort_values('name')# 下面的结果说明了男女中工资从低到高的排序顺序
'''name  age gender  address salary  rn
2   Bella   23  female  qingdao 1234.5  3
3   Kat 26  female  dongjing    2345.6  2
4   Sid 23  male    dongjing    5678.9  2
0   Zero    23  male    jinan   8888.8  1
1   Zoey    24  female  nanjing 6666.6  1
'''

去重

# 按指定字段去重, 保留第一个
df3 = df.drop_duplicates(subset=['colA', 'colB'], keep='first')
# 按全量字段去重, 保留最后一个
df4 = df.drop_duplicates(keep='last')

pd.DataFrame增删改查相关推荐

  1. 【Python数据处理篇——DataFrame数据准备】DataFrame的创建、增删改查、数据导入等

    欢迎访问我搞事情的[知乎账号]:Coffee 以及我的[B站漫威剪辑账号]:VideosMan 若我的笔记对你有帮助,请用小小的手指,点一个大大的赞哦. 关于DataFrame的相关知识,我还进行了汇 ...

  2. python对txt,json,jsonl,csv,xlsx读取操作,dataframe的增删改查学习

    使用pysenal包中的read_json,read_jsonl,read_file,write_json,write_jsonl,write_file方法来对json文件和text文件进行读写 fr ...

  3. Python语言学习之pandas:DataFrame二维表的简介、常用函数、常用案例(增删改查排序之选择指定列、根据条件选择特定数据、赋值、列名重命名、修改列数据、处理缺失值、列合并、分组之详细攻略

    Python语言学习之pandas:DataFrame二维表的简介.常用函数.常用案例(增删改查排序之选择指定列.根据条件选择特定数据.赋值.列名重命名.修改列数据.处理缺失值.列合并.分组之详细攻略 ...

  4. Series 入门(创建和增删改查)

    Series 是pandas两大数据结构中(DataFrame,Series)的一种.使用pandas 前需要将pandas 模块引入,因为Series和DataFrame用的次数非常多,所以将其引入 ...

  5. 初识pandas及基本的增删改查

    pandas pandas 1.表格数据操作:[增删改查] 2.实现多个表格的处理: 3.数据清洗操作: 缺失值,重复值,异常值,数据标准化,数据转换的操作: 4.实现excel的特殊操作:生成透视表 ...

  6. python最强实训程序(增删改查)机房收费管理系统-基于tkinter的图形化界面(附详细代码)

    python最强实训程序(增删改查)机房收费管理系统-基于tkinter的图形化界面(附详细代码) 最近学校实训,用两天时间做了一个python小程序*机房收费管理系统*,一款基于tkinter使用p ...

  7. pandas基本的增删改查用法梳理

    说明: 以下为之前在pandas使用过程中的所用的到对数据的基本增删改查处理方法进行梳理 文章目录 1.数据读取 resd_csv 2.数据保存 3.pandas常用数据格式处理函数 4.增 5.删 ...

  8. R操作MySQL数据库创建表、删除表、增删改查(CRUD)

    R操作MySQL数据库创建表.删除表.增删改查(CRUD) 关系数据中的数据是按照一定范式去存储的.当我们需要非常高级和复杂的Sql查询就可以使用关系数据库的数据资产.不光java和python可以容 ...

  9. java简单的增删改查项目 ATM机

    java简单的增删改查项目 login: package atm;import java.util.ArrayList; import java.util.List; import java.util ...

最新文章

  1. javaOOP项目实战——银行ATM机
  2. android 条件筛选吸顶,自定义吸顶LayoutManager
  3. SQL Server 默认跟踪报表
  4. 前端学习(3236):react生命周期3
  5. SQLlite 分页
  6. 画米老鼠_蔡康永都在买的画你也买得起,村上隆作品收藏大全
  7. 如何在不跳转的情况下实现用户登录
  8. STM32之高级定时器互补输出
  9. JavaScript实现:如何写出漂亮的条件表达式
  10. 如何用java实现使用电子邮件控制你的电脑
  11. 阿里开源深度学习框架XDL,面向高维稀疏数据,支持千亿参数训练规模
  12. (转)【重磅】无监督学习生成式对抗网络突破,OpenAI 5大项目落地
  13. 数据库学习总结与心得
  14. 我的阿里面试经验分享给大家
  15. Unity学习心得3
  16. 软件测试工程师岗位职责、岗位要求
  17. 小学-综合素质【3】
  18. 计算机专硕一般研二在干嘛,专硕一般研二在干嘛,专硕两年怎么安排
  19. AcWing每日一题 1934贝茜放慢脚步
  20. 515. 在每个树行中找最大值(中等 树 广度优先搜索 二叉树)

热门文章

  1. 软考总结——浮想联翩法
  2. 一键备份单个、多个及全数据库(脚本)
  3. Linux、Ubuntu配置ntpd.conf后时间无法同步的问题
  4. 毕业设计-基于微信小程序的学生自我评价系统
  5. C++ 数据结构学习 ---- 列表
  6. 《计算机基础》在线作业,重庆西南大学17年秋季1056《计算机基础》在线作业(参考复习资料)...
  7. 一款自动生成单元测试的 IDEA 插件
  8. jsp页面的调试方法
  9. ACTIVEX实现大文件FTP上传下载---上
  10. 如何从电话本添加联系人