python-3.x - 在循环中同时设置pandas Dataframe中单元格的值和样式(颜色)
问题描述
我编写了一个 python 程序来查找和修复 Excel 电子表格中的语法错误。这部分有效。
如果单元格有可纠正的语法错误,则单元格中的值应该是固定的,并且单元格以黄色突出显示。
如果语法错误不可纠正(没有足够的信息来纠正它),则单元格的值应保持不变,但单元格应以红色突出显示。这是我似乎无法开始工作的部分。
我可以更新单元格的值或突出显示它,但我所有的尝试都失败了。
我使用过类似的命令
df.at[row,col] = value
更新单个单元格,这有效。和
def colorCell(df):
color = 'background-color: red; font-weight: bold'
dfTemp = pd.DataFrame("", index=df.index, columns=df.columns)
for i in df[df["UserId"].str.match(userIdPat) != True]["UserId"].index:
dfTemp.at[i,"UserId"] = color
for i in df[df["Phone Number"].str.match(phonePat) != True]["Phone Number"].index:
dfTemp.at[i,"Phone Number"] = color
for i in df[df["MAC Address"].str.match(macPat) != True]["MAC Address"].index:
dfTemp.at[i,"MAC Address"] = color
return dfTemp
df2 = df.style.apply(colorCell, axis=None)
为单元格着色,但我似乎无法同时设置值和设置样式。
部分问题是我正在修改适当的值(df),同时我正在创建一个新的数据框来设置颜色(df2)。如果我将 df2 写回 df,下次尝试使用
df.at[row,col] = value
我确信有一个简单的解决方法,但我只是没有看到它。
谢谢!
解决方案
@user545424 感谢您建议我发布一个简短的示例。这样做我解决了我自己的问题。
我最初的问题是我必须分离数据框,一个用于数据,一个用于样式。在提出一个简短的例子时,我找到了一种用一个数据框做所有事情的方法(我对 python 和 pandas 都很陌生)。
我想出的解决方法是创建包含“.style”的原始数据框。
所以代替这个命令(我正在使用):
df = pd.DataFrame(np.random.randint(0,100,size=(10, 4)), columns=list('ABCD'))
我现在使用以下命令创建 df:
df = pd.DataFrame(np.random.randint(0,100,size=(10, 4)), columns=list('ABCD')).style
现在,当我想访问/更改 df 的数据部分时,我将其引用为“df.data”,而当我想应用 df 的样式部分时,我将其引用为“df.apply”。这样我就可以使用一个数据框访问数据和样式。这是我发现答案时正在编写的示例代码:
import numpy as np
import pandas as pd
def colorCell(df, row=None, column=None, color="red"):
color = f"background-color: {color}; font-weight: bold"
dfTemp = pd.DataFrame("", index=df.index, columns=df.columns)
dfTemp.at[row,column] = color
return dfTemp
# Create the dataframe including styles.
df = pd.DataFrame(np.random.randint(0,100,size=(10, 4)), columns=list('ABCD')).style
# Update location [1,"A"] and set it to "red".
df.data.loc[1,"A"] = 999
df.apply(colorCell, row=1, column="A", color="red", axis=None)
# Update location [2,"B"] and set it to "yellow".
df.data.loc[2,"B"] = 999
df.apply(colorCell, row=2, column="B", color="yellow", axis=None)
正如我上面所说,我对 python 很陌生,对 pandas 甚至更陌生。所以仅仅因为上述工作,有没有更好的方法来做到这一点?
谢谢!
推荐阅读
- java - json - 如何正确添加 ArrayList
到 ArrayList 的项目 - python - 如何在keras中保存模型过滤器
- visual-studio - 如何从 Power BI Desktop 实时连接到 SQL Server Analysis Services?
- javascript - 从 Graphql 服务器获取数据的哪种方式更好?
- php - URL 在尝试路由时不起作用
- php - Google Adwords API PHP - 删除当前访问令牌的 Oauth2 访问权限
- php - 使用 Laravel 或 PHP 将 sting 转换为 html 代码
- c# - 返回对列表元素的引用以便能够为其赋值
- electron - (如何)我可以在 Microsoft Teams 桌面客户端中打开开发工具吗?
- scala - 谁能解释这段代码片段中 @ _* 的含义?