首页 > 解决方案 > 如何在 panda Dataframe 中映射新的键值对

问题描述

我需要根据 MySQL 的记录生成一个 excel 表。但在将它们写入 excel 之前,我想通过检查数量 > 10000 的条件在数据框中添加新的键值。不幸的是,状态始终在数据框中显示 Ok 状态。即使条件运行良好,它也没有反映在数据框中。一些想法或提示真的很感激。

import mysql.connector
import pandas as pd
import numpy as np
import sys
conn = mysql.connector.connect(host='localhost',
                         database='db_name',
                         user='sammy',
                         password='password')
def apply_color(x):
    if x < 10000:
        color = 'red'
    else:
        color = 'white'

    return 'background-color: %s' %color                        
if conn.is_connected():
    writer = pd.ExcelWriter('demo.xlsx', engine='xlsxwriter')
    writer.save()
    SQL_Query=pd.read_sql_query('''select * from demo_table''', conn)
    df = pd.DataFrame(SQL_Query, columns=['id','desp','amount'])
    df['status'] = np.where(df['amount'].astype(float) >= 10000, 'OK', 'NOTOKS')
    df.style.applymap(apply_color, subset=['status'])
    writer = pd.ExcelWriter('demo.xlsx', engine='xlsxwriter')
    df.to_excel(writer, sheet_name='Sheet1', index=False)
    writer.save()

标签: pythonmysqlpandas

解决方案


对代码的这种编辑可能会使其工作 -

import numpy as np
df = pd.DataFrame(SQL_Query, columns=['id','desp','amount'])
df['status'] = np.where(df['amount'].astype(float) >= 1000, 'OK', 'NOTOK')

对于单元格的颜色编码(参考:根据多个条件格式化熊猫数据框中单元格的颜色)-

def apply_color(x):
    if x < 10000:
        color = 'red'
    else:
        color = 'white'

    return 'background-color: %s' %color

df.style.applymap(apply_color, subset=['status'])

我能够在jupyter笔记本中使用上述颜色编码。不确定,如果这是您要寻找的。


推荐阅读