当前位置: 首页 > news >正文

将pandas.DataFrame转换为以数据为键的字典

在做紫微斗数排盘程序的时候,很容易根据四化口诀做出下面的csv数据:

csv_content = """天干,禄,权,科,忌
甲,廉贞,破军,武曲,太阳
乙,天机,天梁,紫微,太阴
丙,天同,天机,文昌,廉贞
丁,太阴,天同,天机,巨门
戊,贪狼,太阴,太阳,天机
己,武曲,贪狼,天梁,文曲
庚,太阳,武曲,天府,天同
辛,巨门,太阳,文曲,文昌
壬,天梁,紫微,天府,武曲
癸,破军,巨门,太阴,贪狼"""

但是在实际使用的时候,却是在根据星曜名称去找相关的天干,查询四化情况,以致于在设置星曜四化的函数中对每一个星曜制作了类似于下面的天干四化字典:

# 廉贞的天干四化

lianzhen_stem_changes = {'甲': '禄', '丙': '忌'}

如果直接将上面的csv转换成形如下面的字典的字典,在需要查找星曜的四化时,先通过星曜名称找到对应的四化字典,再从四化字典中取出四化,那就比较简单了。

star_changes_dict = {'廉贞': {'甲': '禄', '丙': '忌'},
                     '破军': {'甲': '权', '癸': '禄'},
                     '武曲': {'甲': '科', '己': '禄', '庚': '权', '壬': '忌'},
                     '太阳': {'甲': '忌', '戊': '科', '庚': '禄', '辛': '权'},
                     '天机': {'乙': '禄', '丙': '权', '丁': '科', '戊': '忌'},
                     '天梁': {'乙': '权', '己': '科', '壬': '禄'},
                     '紫微': {'乙': '科', '壬': '权'},
                     '太阴': {'乙': '忌', '丁': '禄', '戊': '权', '癸': '科'},
                     '天同': {'丙': '禄', '丁': '权', '庚': '忌'},
                     '文昌': {'丙': '科', '辛': '忌'},
                     '巨门': {'丁': '忌', '辛': '禄', '癸': '权'},
                     '贪狼': {'戊': '禄', '己': '权', '癸': '忌'},
                     '文曲': {'己': '忌', '辛': '科'},
                     '天府': {'庚': '科', '壬': '科'}}

这实际上是一个将pandas.DataFrame转换为以数据为键的字典的过程,实现代码如下:

import pandas as pd
from io import StringIO

# 模拟 CSV 文件内容
csv_content = """天干,禄,权,科,忌
甲,廉贞,破军,武曲,太阳
乙,天机,天梁,紫微,太阴
丙,天同,天机,文昌,廉贞
丁,太阴,天同,天机,巨门
戊,贪狼,太阴,太阳,天机
己,武曲,贪狼,天梁,文曲
庚,太阳,武曲,天府,天同
辛,巨门,太阳,文曲,文昌
壬,天梁,紫微,天府,武曲
癸,破军,巨门,太阴,贪狼"""

# 读取 CSV 文件内容
df = pd.read_csv(StringIO(csv_content))

# 初始化一个空字典来存储转换后的结果
star_dict = {}

# 遍历DataFrame的每一行
for _, row in df.iterrows():
    # 取出天干,作为字典内部的天干四化字典的键
    stem = row['天干']
    for change_type in ['禄', '权', '科', '忌']:
        # 取出禄、权、科、忌对应的星曜,作为外部字典的键
        star = row[change_type]
        # 如果星曜没有包含在外部字典中,则添加空字典项
        if star not in star_dict:
            star_dict[star] = {}
        # 在外部字典的值中以天干为键四化类型为值增加一个字典项
        star_dict[star][stem] = change_type


# 输出结果
for key in star_dict.keys():
    print(f"'{key}': {star_dict[key]}")
# 输出贪狼星的天干四化字典
key = '贪狼'
print(star_dict[key]) if key in star_dict.keys() else print('not found')

程序输出如下:

'廉贞': {'甲': '禄', '丙': '忌'}
'破军': {'甲': '权', '癸': '禄'}
'武曲': {'甲': '科', '己': '禄', '庚': '权', '壬': '忌'}
'太阳': {'甲': '忌', '戊': '科', '庚': '禄', '辛': '权'}
'天机': {'乙': '禄', '丙': '权', '丁': '科', '戊': '忌'}
'天梁': {'乙': '权', '己': '科', '壬': '禄'}
'紫微': {'乙': '科', '壬': '权'}
'太阴': {'乙': '忌', '丁': '禄', '戊': '权', '癸': '科'}
'天同': {'丙': '禄', '丁': '权', '庚': '忌'}
'文昌': {'丙': '科', '辛': '忌'}
'巨门': {'丁': '忌', '辛': '禄', '癸': '权'}
'贪狼': {'戊': '禄', '己': '权', '癸': '忌'}
'文曲': {'己': '忌', '辛': '科'}
'天府': {'庚': '科', '壬': '科'}
{'戊': '禄', '己': '权', '癸': '忌'}  # 贪狼星的天干四化字典

http://www.dtcms.com/a/106069.html

相关文章:

  • 【FPGA开发】用 Verilog编程实现一个分秒计数器(实现按键暂停、消抖功能)
  • 关于UDP端口扫描概述
  • Vue表单数据回显失败技术解析与修复指南!!!
  • RapidJSON 处理 JSON(高性能 C++ 库)(四)
  • 检查是否存在占用内存过大的SQL
  • 服务器入门操作1(深度学习)
  • 【Deepseek、ChatGPT】智能气候前沿:AI Agent结合机器学习与深度学习在全球气候变化驱动因素预测中的应用
  • 高通Android10 铃声通话音频80%音量修改
  • 【Easylive】transferVideoFile 方法详细解析
  • 边缘计算的崛起:当计算从“云端漫步“变成“街头快闪“
  • ZLG嵌入式笔记 | 文件系统异步写入引发的问题
  • 魔改chromium——基础环境搭建
  • Go语言深度解析:从Java到Go的范式革命与实践指南
  • linux发布程序常用脚本
  • Skl-Videolingo-v2.0(VideoLingo):打破语言壁垒的下一代视频本地化工具
  • 云安全入门
  • spring-ai-alibaba第二章ollama集成EmbeddingModel
  • pyexcelerate在写入Excel时为何效率高?
  • Kotlin 协程官方文档知识汇总(二)
  • 详解隔离级别(4种),分别用表格展示问题出现的过程及解决办法
  • Geotools结合SLD实现矢量中文标注下的乱码和可用字体解析
  • 基于JavaWeb的二手图书交易系统(源码+lw+部署文档+讲解),源码可白嫖!
  • 【云原生】Kubernetes CEL 速查表
  • 【Git “fetch“ 命令详解】
  • Spring Boot中事务状态(TransactionStatus)的核心信息及常见应用场景
  • Android Photo Picker 深入解析与实战指南
  • 【视觉与语言模型参数解耦】为什么?方案?
  • Qt之共享内存类QSharedMemory的使用及实现原理(全)
  • 3.第二阶段x64游戏实战-分析人物移动实现人物加速
  • 网络安全等级保护测评