pandas 筛选
t={
"age": [, , np.nan, , np.nan, ],
"city": ["BeiJing", "ShangHai", "GuangZhou", "ShenZhen", 'BeiJing', "ShangHai"],
"sex": [None, "male", "female", "male", np.nan, "unknown"],
"birth": ["2000-02-10", "1988-10-17", None, "1978-08-08", np.nan, "1988-10-17"],
"score":[,,,,,],
"naem":['sdf','aa','bb','tt','ere','tt'],
"name":['sdf 11','aa 22','bb 33','tt 44','ere 55','tt 66']
}
df =DataFrame(t)
index = pd.Index(data=["Tom", "Bob", "Mary", "James", "Andy", "Alice"], name="name") data = {
"age": [, , np.nan, , np.nan, ],
"city": ["Bei Jing ", "Shang Hai ", "Guang Zhou", "Shen Zhen", np.nan, " "],
"income": [None, , ,, np.nan, ],
"sex": [None, "male", "female", "male", np.nan, "unknown"],
"birth": ["2000-02-10", "1988-10-17", None, "1978-08-08", np.nan, "1988-10-17"]
} df = pd.DataFrame(data=data, index=index) print(df.get('age1') ) #使用get,没有此列也不会报错
print(df.get('age').get()) # 索引到具体的单元格
print(df['age'][1]) #索引到具体的单元格
print(df[::]) #每两行筛选 一次数据
print(df[::-]) #行逆序
print(df['age']) #筛选单列
print(df[['age','sex']]) #筛选多列
print(df.iloc[]) #筛选第一行
print(df.iloc[, ]) #筛选出单元格 第二行第一列的数据
print(df.iloc[[, , ], ]) # 筛选出多行一列 第二行、第一行、第三行对应的第一列的数据
print(df.iloc[:, :]) #切片,多行多列
print(df.loc["Tom": "Mary"]) #多行
print(df.loc[:, "age": "birth"]) # 多列
# loc与iloc的区别: 通过名称来筛选时,传入的切片是左右都包含的
print(df[~(df.sex == 'unknown')]) #取反
print(df.loc[df.age > , ["age"]]) # 通过loc进行逻辑筛选
print(df[df.sex.isin(["male", "female"])]) # 对几个常量进行筛选
print(df[df.index.isin(["Bob"])]) # 索引也可以用 isin
print(df[lambda x: x["age"] > ]) #通过函数进行筛选,必须是带有一个参数
print(df.loc[lambda x: x.age > , lambda x: ["age"]])
# ============
user_info=df
grouped = user_info.groupby(["sex", "age"]) # user_info.groupby(["sex", "age"], sort=False) groupby 会在操作过程中对数据进行排序。如果为了更好的性能,可以设置 sort=False
print(grouped.groups)
for name, group in grouped: # 遍历分组,如果是根据多个字段来分组的,每个组的名称是一个元组
print("name: {}".format(name))
print("group: {}".format(group))
user_info.groupby(["sex", "age"]).get_group(("male", )) # 选择一个分组用 get_group rs=grouped["age"].agg(np.max) # 对分组后的某一列进行统计
# 如果是根据多个键来进行聚合,默认情况下得到的结果是一个多层索引结构。可以设置参数 as_index=False 避免多层索引
# 对已经有多层索引的对象可以通过reset_index ,去掉多层索引 rs.reset_index()
grouped["income"].agg([np.sum, np.mean]).rename(columns={"sum": "income_sum", "mean": "income_mean"}) #一次进行多个聚合操作,并重命名统计结果
grouped.agg({"age": np.mean, "income": np.sum}) # 不同列进行不同的聚合操作
# 使用apply,通过带参数的函数对列进行处理
def f1(ser, num=):
return ser.nlargest(num).tolist() #
print(grouped["income"].apply(f1))
# 前面进行聚合运算的时候,得到的结果是一个以分组名作为索引的结果对象。虽然可以指定 as_index=False ,但是得到的索引也并不是元数据的索引。
# 如果我们想使用原数组的索引的话,可以使用transform
grouped = user_info.groupby("sex")
print(grouped["income"].transform(np.mean)) print(user_info.to_json()) #将dataframe转成json字符串
data1 = {
"name": ["Tom", "Bob"],
"age": [, ],
"city": ["Bei Jing ", "Shang Hai "]
}
df1 = pd.DataFrame(data=data1)
data2 = {
"name": ["Mary", "James"],
"age": [, ],
"city": ["Guang Zhou", "Shen Zhen"]
}
df2 = pd.DataFrame(data=data2)
# append和concat实现的功能差不多
print(df1.append(df2,ignore_index=True)) #ignore_index=True 是为了重新生成索引
print(pd.concat([df1,df2],ignore_index=True))
data2 = {"name": ["Bob", "Mary", "James", "Andy"],
"sex": ["male", "female", "male", np.nan],
"income": [, , , ]
}
df2 = pd.DataFrame(data=data2)
#join和merge功能差不多
print(pd.merge(df1, df2, on="name", how="outer")) #outer inner left right
print(df1.join(df2.set_index("name"),on="name",how='outer'))
# 两个 DataFrame 中需要关联的键的名称不一样,可以通过 left_on 和 right_on 来分别设置 pd.merge(df1, df2, left_on="name1", right_on="name2")
# 两个DataFrame中都包含相同名称的字段时,可以设置参数 suffixes,默认 suffixes=('_x', '_y') 表示将相同名称的左边的DataFrame的字段名加上后缀 _x,右边加上后缀 _y
pandas 筛选的更多相关文章
- 【跟着stackoverflow学Pandas】Select rows from a DataFrame based on values in a column -pandas 筛选
最近做一个系列博客,跟着stackoverflow学Pandas. 以 pandas作为关键词,在stackoverflow中进行搜索,随后安照 votes 数目进行排序: https://stack ...
- 【452】pandas筛选出表中满足另一个表所有条件的数据
参考:pandas筛选出表中满足另一个表所有条件的数据 参考:pandas:匹配两个dataframe 使用 pd.merge 来实现 on 表示查询的 columns,如果都有 id,那么这是很好的 ...
- pandas 筛选指定行或者列的数据
pandas主要的两个数据结构是:series(相当于一行或一列数据结构和DataFrame(相当于多行多列的一个表格数据机构). 原文:https://www.cnblogs.com/gangand ...
- Pandas 筛选操作
# 导入相关库 import numpy as np import pandas as pd 在数据处理过程中,经常会遇到要筛选不同要求的数据.通过 Pandas 可以轻松时间,这一篇我们来看下如何使 ...
- 使用pandas筛选出指定列值所对应的行
在pandas中怎么样实现类似mysql查找语句的功能: select * from table where column_name = some_value; pandas中获取数据的有以下几种方法 ...
- pandas筛选数据。
https://jingyan.baidu.com/article/0eb457e508b6d303f0a90572.html 假如我们想要筛选D列数据中大于0的行:df[df['D']>0] ...
- pandas筛选0,3,6开头的行
http://stackoverflow.com/questions/15325182/how-to-filter-rows-in-pandas-by-regex dbstk.loc[dbstk.ST ...
- pandas 筛选某一列最大值最小值 sort_values、groupby、max、min
高效方法: dfs[dfs['delta'].isnull()==False].sort_values(by='delta', ascending=True).groupby('Call_Number ...
- pandas的筛选功能,跟excel的筛选功能类似,但是功能更强大。
Select rows from a DataFrame based on values in a column -pandas 筛选 https://stackoverflow.com/questi ...
随机推荐
- [转帖]dfs和bfs
dfs和bfs https://www.cnblogs.com/wzl19981116/p/9397203.html 1.dfs(深度优先搜索)是两个搜索中先理解并使用的,其实就是暴力把所有的路径都搜 ...
- Java开发笔记(一百四十七)通过JDBC管理数据库
前面介绍了如何通过JDBC获取数据库连接,可是Connection对象不能直接执行SQL语句,需要引入Statement报告对象才能操作SQL.Statement对象由Connection的creat ...
- php中让数组顺序随机化,打乱顺序等
php中有很多排序的函数,sort,rsort,ksort,krsort,asort,arsort,natcasesort,这些函数用来对数组的键或值进行这样,或那样的排序. 可以终究有时候还需要一些 ...
- Mysql练习题(1)
表名和字段------------------------------------------------------------------------------–1.学生表Student(s_i ...
- php mysqli 预处理操作数据库
用到的SQL表 CREATE TABLE `student_01` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) CHARAC ...
- Oracle数据库基本知识-原理,实例,表空间,用户,表
1.数据库原理及sql 数据库:是人们存放数据,访问数据,操作数据的存储仓库. DB:数据库,按存储结构来组织,存储和管理的数据仓库 DBMS:数据库管理系统,管理数据库的软件 SQL:结构化查询语言 ...
- Golang ---基准测试
什么是基准测试 基准测试,是一种测试代码性能的方法,比如你有多种不同的方案,都可以解决问题,那么到底是那种方案性能更好呢?这时候基准测试就派上用场了. 基准测试主要是通过测试CPU和内存的效率问题,来 ...
- [开发ing] Unity项目 - Hero英雄
目录 游戏原型 项目演示 绘图资源 代码实现 技术探讨 参考来源 游戏原型 游戏介绍:这是一款横版类魂游戏,玩家将操控Hero,在诸神黄昏的墓地中,挑战源源不断的敌人,以及近乎无敌的强大boss 灵感 ...
- Java自学-数组 Arrays
java.util.Arrays类常用方法 Arrays是针对数组的工具类,可以进行 排序,查找,复制填充等功能. 大大提高了开发人员的工作效率. 步骤 1 : 数组复制 与使用System.arra ...
- Spring源码——IOC控制反转
1.基础知识 Spring有两个核心功能,分别是ioc和aop,其中ioc是控制反转,aop是切面编程. 在ioc中,还有一个名次叫DI,也就是依赖注入.嗯,好像IOC和DI是指同一个,好像又感觉他俩 ...