python中dict数据转DataFrame,pandas实现类似sql查询语句

2023-10-27

目的:将一组dict字典数据转为pandas的DataFrame格式,然后用pandas实现类似sql语句中select * from xxx where condition的功能。

一、python中将dict格式数据转为DataFrame格式

        转换方法有多种,看需求的DataFrame格式是什么样的。我采用的是将dict中key作为列,值作为行的方法

        在我的任务中,需要将多个字典合并到一个DataFrame中,因此采用如下方法:

        第一步将多个字典存入list中。

        第二步由pd.DataFrame()转格式。

# 一组字典
dict1 = {'name': '张三', 'id': '0', 'value': 'aaa'}
dict11 = {'name': '张三', 'id': '0', 'value': 'aaa2'}
dict12 = {'name': '张三', 'id': '0', 'value': 'aaa3'}
dict13 = {'name': '张三', 'id': '0', 'value': 'aaa3'}

dict2 = {'name': '李四', 'id': '1', 'value': 'bbb'}
dict3 = {'name': '王五', 'id': '2', 'value': 'ccc'}
dict4 = {'name': '马六', 'id': '3', 'value': 'ddd'}

# 存入list
tmp_list = [dict1, dict11, dict12, dict13, dict2, dict3, dict4]

# 转为DataFrame
df = pd.DataFrame(tmp_list)
print(df)

result:
  name id value
0   张三  0   aaa
1   张三  0  aaa2
2   张三  0  aaa3
3   张三  0  aaa3
4   李四  1   bbb
5   王五  2   ccc
6   马六  3   ddd

dict转DataFrame参考:Python 将字典(dict)转换为DataFrame_python字典转dataframe_pumpkin96的博客-CSDN博客

二、使用pandas内置方法实现类似sql的select查询

  (1)  使用pandas进行select操作:在SQL中,如果我们要从df中选取前三行的name和value列数据,SQL的语法为:

select name, value from df limit 3

使用pandas进行查询语法为:

result = df[['name', 'value']].head(3)

print(result)

result:
  name value
0   张三   aaa
1   张三  aaa2
2   张三  aaa3

  (2)   pandas进行where条件查询:在SQL中,查询name为张三的所有行,where操作语法为:

select * from df where name = '张三'

pandas语法为:

result = df[df['name'] == '张三']

print(result)

  name id value
0   张三  0   aaa
1   张三  0  aaa2
2   张三  0  aaa3
3   张三  0  aaa3

  (3)  多个条件查询时,sql中语法为and和or。

select * from df where name = '张三' and value =aaa3

pandas中使用符号“&”和“|”实现。

result = df[(df['name'] == '张三')&(df['value'] == 'aaa3')]

print(result)

  name id value
2   张三  0  aaa3
3   张三  0  aaa3

同时使用df.value_counts()或者len()可以统计查询结果的数量。

result = df[(df['name'] == '张三')&(df['value'] == 'aaa3')].value_counts()

print(result)

name  id  value
张三    0   aaa3     2
dtype: int64

  (4)  pandas中去重操作,sql中语法为distinct。

select distinct * from temp where name = '张三'

此时sql搜索结果为:

 若sql语句为distinct name:

select distinct name from temp where name = '张三'

则是对name进行去重,sql的去重结果保留了重复时的第一行数据。

 在pandas中使用df.drop_duplicates()进行去重操作。

a = df[df['name'] == '张三']  # select * from temp where name = '张三'操作

# distinct去重操作
result = a.drop_duplicates(subset=None, keep='first', inplace=False, ignore_index=False)
print(result)

  name id value
0   张三  0   aaa
1   张三  0  aaa2
2   张三  0  aaa3

第二条sql语句pandas可以这样写。

# select name from df where name = '张三'
a = df[['name']][df['name'] == '张三']

# distinct去重操作
result = a.drop_duplicates(subset='name', keep='first', inplace=False, ignore_index=False)  
print(result)

result:
  name
0   张三

其中:

  • subset:设置识别重复项的列名或列名序列,对某些列来识别重复项,默认情况下为None,使用所有列,即识别完全相同的内容,若设置,则仅识别对应的列;

  • keep参数:确定要保留哪些重复项,可选值有first,last,False,默认为first。

    1. first:删除除第一次出现的重复项,即保留第一次出现的重复项
    2. last:保留最后一次出现的重复项
    3. False:删除所有重复项
  • inplace参数:表示是否返回副本,默认为False表示返回副本,设置为True表示在原数据上修改

  • ignore_index参数:指示是否重新生成行索引,默认为False表示不生成,此时会导致index乱序,设置为True表示重新按照0,1 ,2…生成index

pandas实现sql查询参考:

https://www.cnblogs.com/diruodaichang/p/11423742.html


 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python中dict数据转DataFrame,pandas实现类似sql查询语句 的相关文章

  • python 中分割字符串以获得一个值?

    需要帮助 假设我在名为 input 的变量中有一个字符串 Sam Person name kind input split 通过执行上述操作 我得到两个具有不同字符串 Sam 和 Person 的变量 有没有办法只获取第一个值 name S
  • Python BeautifulSoup XML 解析

    我编写了一个简单的脚本来使用 BeautifulSoup 模块解析 XML 聊天日志 标准 soup prettify 工作正常 只是聊天日志中有很多绒毛 您可以在下面看到我正在使用的脚本代码和一些 XML 输入文件 Code import
  • Pandas重置索引未生效[重复]

    这个问题在这里已经有答案了 我不确定我在哪里误入歧途 但我似乎无法重置数据帧上的索引 当我跑步时test head 我得到以下输出 正如您所看到的 数据帧是一个切片 因此索引超出范围 我想做的是重置该数据帧的索引 所以我跑test rese
  • 如何从 Dockerfile 安装 Python 3.7 和 Pip

    我正在尝试构建基于 Ubuntu 18 04 的自定义 Docker 映像 Ubuntu 预装了 Python 3 6 但我想 1 安装 Python 3 7 2 将其设置为默认 Python 版本 这样就可以使用python代替pytho
  • Python igraph:从图中删除顶点

    我正在使用安然电子邮件数据集 并尝试删除没有 enron com 的电子邮件地址 即我只想拥有安然电子邮件 当我尝试删除那些没有 enron com 的地址时 一些电子邮件由于某些原因被跳过 下面显示了一个小图 其中顶点是电子邮件地址 这是
  • “char”/“character”类型的类型提示

    char 或 character 没有内置的原始类型 因此显然必须使用长度为 1 的字符串 但是为了暗示这一点并暗示它应该被视为一个字符 如何通过类型提示来实现这一点 grade chr A 一种方法可能是使用内置的 chr 函数来表示这一
  • 在径向(树)网络x图中查找末端节点(叶节点)

    给定下图 是否有一种方便的方法来仅获取末端节点 我所说的端节点是指那些具有一个连接边的到节点 我认为这些有时被称为叶节点 G nx DiGraph fromnodes 0 1 1 1 1 1 2 3 4 5 5 5 7 8 9 10 ton
  • 更新plpgsql中触发器函数中的多列

    给出以下架构 create table account type a id SERIAL UNIQUE PRIMARY KEY some column VARCHAR create table account type b id SERIA
  • matplotlib matshow 标签

    我一个月前开始使用 matplotlib 所以我仍在学习 我正在尝试用 matshow 制作热图 我的代码如下 data numpy array a reshape 4 4 cax ax matshow data interpolation
  • 如何在python中检索aws批处理参数值?

    流程 Dynamo DB gt Lambda gt 批处理 如果将角色 arn 插入动态数据库 它是从 lambda 事件中检索的 然后使用submit job角色 arn 的 API 被传递为 parameters role arn ar
  • Python 中的 @staticmethod 与 @classmethod

    方法和方法有什么区别装饰的 https peps python org pep 0318 with staticmethod http docs python org library functions html staticmethod和
  • SQL Group BY,每个组的前 N ​​个项目

    我有一个 SQL 查询 可以获取给定商店中销量最高的 5 件商品 SELECT TOP 5 S UPCCode SUM TotalDollarSales FROM Sales S WHERE S StoreId 1 GROUP BY S U
  • 如何列出 python PDB 中的当前行?

    在 perl 调试器中 如果重复列出离开当前行的代码段 可以通过输入命令返回到当前行 点 我无法使用 python PDB 模块找到任何类似的东西 如果我list如果我自己离开当前行并想再次查看它 似乎我必须记住当前正在执行的行号 对我来说
  • 在存储过程结束时显式删除本地临时表有什么好处?

    考虑以下伪 T SQL 代码 由存储过程执行 CREATE TABLE localTable
  • Matplotlib Scatter - ValueError:RGBA 序列的长度应为 3 或 4

    我正在尝试为我的功能绘制图表 但不断收到此错误 ValueError RGBA sequence should have length 3 or 4 每当我只有 6 种形状时 代码就可以完美运行 但现在我将其增加到 10 种 它就不起作用了
  • 将一个列表的元素除以另一个列表的元素

    我有两个清单 比如说 a 10 20 30 40 50 60 b 30 70 110 正如你所看到的 列表 b 由一个列表的元素总和组成 其中 window 2 b 0 a 0 a 1 10 20 30 etc 如何获得另一个列表 该列表由
  • Scipy 稀疏 Cumsum

    假设我有一个scipy sparse csr matrix代表下面的值 0 0 1 2 0 3 0 4 1 0 0 2 0 3 4 0 我想就地计算非零值的累积和 这会将数组更改为 0 0 1 3 0 6 0 10 1 0 0 3 0 6
  • 为什么我们应该在 def __init__(self, n) -> None: 中使用 -> ?

    我们为什么要使用 gt in def init self n gt None 我读了以下摘录来自 PEP 484 https www python org dev peps pep 0484 the meaning of annotatio
  • 如何禁止 celery 中的 pickle 序列化

    Celery 默认使用 pickle 作为任务的序列化方法 如中所述FAQ http ask github com celery faq html isn t using pickle a security concern 这代表一个安全漏
  • 来自 django 教程 was_published_recently.admin_order_field = 'pub_date'

    From Django 教程 https www jetbrains com help pycharm 2017 1 creating and running your first django project html d28041e21

随机推荐