当前位置: 首页 > 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')

程序输出如下:

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

相关文章:

  • 【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种),分别用表格展示问题出现的过程及解决办法
  • 巴菲特股东大会前瞻:执掌伯克希尔60年,巨轮将驶向何方
  • 中央网信办:重点整治违规AI产品、利用AI制作发布谣言等突出问题
  • 节前A股持续震荡,“五一”假期持股还是持币过节胜率更高?
  • 美的集团一季度净利增长38%,库卡中国机器人接单增超35%
  • 五一假期上海推出首批16条“市民健康路线”,这些健康提示请收好
  • 西湖大学独家回应本科招生走出浙江:经过三年试点,条件成熟