在 Python 中使用 Excel 文件作为 pandas 数据框的映射

Posted

技术标签:

【中文标题】在 Python 中使用 Excel 文件作为 pandas 数据框的映射【英文标题】:Using Excel file as mapping for pandas dataframe in Python 【发布时间】:2021-12-14 18:57:23 【问题描述】:

我正在尝试使用错误代码的 excel“主列表”以及它们所属的较大组,它们属于熊猫数据框中较大组的组错误。我不确定如何做到这一点。我以前尝试将错误代码添加到字典中,并使用组名作为键并按其进行分组,但它不会正确地对代码进行分组。我将在下面添加我的主列表和数据框的示例。

主列表:

CODE Type 1 Type 2 Type 3 Type4
Code A X
Code B X
Code C X
Code D X
Code E X

10 列 57 行以此类推

数据帧:

CODE Numerator Denominator Error Rate
CODE B 6 10 0.6
CODE A 4 10 0.4
CODE C 9 10 0.9
CODE D 0 10 0

无论出现什么错误代码,依此类推

我希望输出是:

CODE Numerator Denominator Error Rate
Type 1 15 10 1.5
Type 2 4 10 0.4
Type 4 0 10 0

等等以进行适当的分组。

我该怎么做?

我用过字典,我用过 isin() 和类型列表,但无济于事。

这是我的示例文件的简化版本:

CODE Power Cycle Panics Temp App Restart
Panic X
Power Reset-Power_Reset-Hard Power X
Power Reset-Hard_Power-Hard Power X
HARD-App-Restart X
Code-Reason Temperature X

10 列 57 行以此类推

CODE Numerator Denominator Error Rate
Power Reset-Power_Reset-Hard Power 6 10 0.6
Panic 4 10 0.4
Power Reset-Hard_Power-Hard Power 9 10 0.9
HARD-App-Restart 0 10 0

对于出现的错误代码的行数,以此类推

期望的输出: |代码|分子|分母|错误率| |----|---------|------------|----------| |电源循环| 15 | 10 | 1.5 | |恐慌| 4 | 10 | 0.4 | |应用重启 | 0 | 10 | 0 |

【问题讨论】:

【参考方案1】:

说第一个数据帧 df1 第二个 df2

#convert Code to CODE in first dataframe with str.upper for standardization
df1.CODE = df1.CODE.str.upper()

#replace X with column names and remove nan values
df1["new"] = df1.filter(like="T").replace("X", pd.Series(df1.columns, df1.columns)).stack().to_numpy()

#replace CODE A,B,C,D,E with Type 1,2,3,4
df2["CODE"] = df2[["CODE"]].replace(df1[["CODE","new"]].set_index("CODE").to_dict()["new"],regex=True)

df2

    CODE    Numerator   Denominator Error Rate
0   Type 1      6          10         0.6
1   Type 2      4          10         0.4
2   Type 1      9          10         0.9
3   Type 4      0          10         0.0

【讨论】:

谢谢,从那里我可以做一个groupby() 将相似类型的代码合并在一起? 想使用 groupby 吗?这里不需要groupby 这取决于你的问题。我的代码有效吗?有没有我错过的一点? 我还没有让它工作。我的数据框比我包含的示例更健壮,因此我正在尝试针对这一事实进行调整。我还想确保合并相同错误类型的出现。就像代码 B 和代码 C 是同一类型一样,不仅仅是将它们转换为类型,而是将它们的分子相加。在现实生活中,代码 B 类似于“Power Reset-Power_Reset-Hard Power”,代码 C 类似于“Power Reset-Hard_Power-Hard Power” 当我将您的代码应用于我的数据并调整正确的名称时,我收到一个值错误:ValueError: Length of values (35) does not match length of index (56)

以上是关于在 Python 中使用 Excel 文件作为 pandas 数据框的映射的主要内容,如果未能解决你的问题,请参考以下文章

在python中的csv中转换一个假定的excel文件

在实现从excel中读取数据作为接口参数遇到的问题

如何将 Python 数据帧存储在内存中并将其作为 excel 附件发送到特定的电子邮件地址?

Excel表中连接sql并使用sql语句引用excel单元格数据作为查询条件

python3 读excel转Json文件

python Excel读写操作