攝影或3C

Python: 如何使用巢狀字典(dict)生成pandas.DataFrame?

要创建一个包含多个测试站(Station 1, Station 2, Station 3, Station 4),且每个测试站有多个单元测试(UUT)的 DataFrame,并且每个 UUT 包含三个测试结果(例如 “pass”, “fail”),我们可以如下构建 DataFrame。

首先,我们需要修改嵌套字典的结构,以便每个测试站都包含若干 UUT 的测试结果。然后创建一个 DataFrame,每个测试站作为一个列,每个列中的值是另一个字典,表示各个 UUT 的测试结果。

code:

import pandas as pd

# 设置Pandas显示选项
pd.set_option('display.max_columns', None)  # 无限制显示列

# 更新的嵌套字典数据
data = {
    'Station 1': {
        'UUT 1': ["pass", "fail", "pass"],
        'UUT 2': ["fail", "pass", "fail"],
        'UUT 3': ["pass", "pass", "fail"],
        'UUT 4': ["pass", "fail", "fail"]
    },
    'Station 2': {
        'UUT 1': ["fail", "pass", "pass"],
        'UUT 2': ["pass", "pass", "fail"],
        'UUT 3': ["fail", "fail", "pass"],
        'UUT 4': ["pass", "fail", "pass"]
    },
    'Station 3': {
        'UUT 1': ["pass", "pass", "fail"],
        'UUT 2': ["fail", "fail", "pass"],
        'UUT 3': ["pass", "fail", "fail"],
        'UUT 4': ["fail", "pass", "pass"]
    },
    'Station 4': {
        'UUT 1': ["fail", "pass", "fail"],
        'UUT 2': ["pass", "fail", "pass"],
        'UUT 3': ["fail", "pass", "fail"],
        'UUT 4': ["pass", "pass", "fail"]
    }
}

# 创建 DataFrame
df = pd.DataFrame(data)

# 输出 DataFrame 查看结果
print(df)

輸出結果:

这将创建一个 DataFrame,每个测试站作为一个列,每个 UUT 的测试结果为该列的一个元素(列表形式)。输出的 DataFrame 将显示每个测试站及其对应 UUT 的测试结果列表。

外層的key有種轉置的感覺,
內層的的key則不轉置

df.to_excel()輸出的xlsx:

虽然这种表格形式简洁易懂,适合直观展示每个单元测试的结果,但它并不便于进行进一步的数据处理和分析。例如,要计算每个测试站的通过率、失败率或进行其他统计分析时,这种数据结构就显得不够方便。

为了更好地分析数据,我们可以调整 DataFrame 的结构,使其更适合进行统计计算。一种方法是将每个测试结果作为单独的行,并包括测试站、UUT编号和测试结果作为列,这样的长格式(long format)更适合分析处理。

下面是如何将数据转换为更适合分析的格式的示例:

import pandas as pd

# 原始数据每个测试站包含多个UUT的测试结果列表
data = {
    'Station 1': {
        'UUT 1': ["pass", "fail", "pass"],
        'UUT 2': ["fail", "pass", "fail"],
        'UUT 3': ["pass", "pass", "fail"],
        'UUT 4': ["pass", "fail", "fail"]
    },
    'Station 2': {
        'UUT 1': ["fail", "pass", "pass"],
        'UUT 2': ["pass", "pass", "fail"],
        'UUT 3': ["fail", "fail", "pass"],
        'UUT 4': ["pass", "fail", "pass"]
    },
    'Station 3': {
        'UUT 1': ["pass", "pass", "fail"],
        'UUT 2': ["fail", "fail", "pass"],
        'UUT 3': ["pass", "fail", "fail"],
        'UUT 4': ["fail", "pass", "pass"]
    },
    'Station 4': {
        'UUT 1': ["fail", "pass", "fail"],
        'UUT 2': ["pass", "fail", "pass"],
        'UUT 3': ["fail", "pass", "fail"],
        'UUT 4': ["pass", "pass", "fail"]
    }
}

# 转换为更适合分析的格式
rows = []
for station, uuts in data.items():
    for uut, results in uuts.items():
        for result in results:
            rows.append([station, uut, result])

# 创建 DataFrame
df = pd.DataFrame(rows, columns=['Station', 'UUT', 'Result'])

# 输出 DataFrame 查看结果
print(df)

輸出結果:

推薦hahow線上學習python: https://igrape.net/30afN

儲蓄保險王

儲蓄險是板主最喜愛的儲蓄工具,最喜愛的投資理財工具則是ETF,最喜愛的省錢工具則是信用卡