在 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 数据帧存储在内存中并将其作为 excel 附件发送到特定的电子邮件地址?