Python 使用numpy将条件格式(如十六进制颜色)附加到列表

Python 使用numpy将条件格式(如十六进制颜色)附加到列表,python,python-2.7,numpy,Python,Python 2.7,Numpy,在我的原始代码中,被修改的列表不是由csv生成的,而是由另一个函数生成的。不过,为了解决问题,我们将从csv文件生成列表 我相信一定有人知道如何编辑python脚本来解决这个问题 问题/错误/变化在于,我正在寻找一种修改python代码的方法,以便为任何空的或包含NA的单元格提供一种完全不同的十六进制颜色(不是渐变比例中的颜色),但是从一开始就解释问题 以csv格式存储的数据,用于查看和解决问题。 UniqueData1,UniqueTest1,13,13.39%,42.7%,Data Uniq

在我的原始代码中,被修改的列表不是由csv生成的,而是由另一个函数生成的。不过,为了解决问题,我们将从csv文件生成列表

我相信一定有人知道如何编辑python脚本来解决这个问题

问题/错误/变化在于,我正在寻找一种修改python代码的方法,以便为任何空的或包含
NA
的单元格提供一种完全不同的十六进制颜色(不是渐变比例中的颜色),但是从一开始就解释问题

以csv格式存储的数据,用于查看和解决问题。

UniqueData1,UniqueTest1,13,13.39%,42.7%,Data
UniqueData1,UniqueTest1,14,82%,41.9%,Data
UniqueData1,UniqueTest1,18,29.39%,41%,Data
UniqueData2,UniqueTest2,22.3,44.4%,42.3%,Data
UniqueData2,UniqueTest2,4,44.2%,43.4%,Data
UniqueData2,UniqueTest2,4.1,49%,42.7%,Data
UniqueData3,UniqueTest1,4.45,49.5%,42.42%,Data
UniqueData3,UniqueTest1,4.29,20%,42.3%,Data
UniqueData3,UniqueTest1,4.22,25%,41.2%,Data
需要修改的数据以列表形式存储,如下所示

[['UniqueData1', 'UniqueTest1', '13', '13.39%', '42.7%', 'Data'], ['UniqueData1', 'UniqueTest1', '14', '82%', '41.9%', 'Data'], ['UniqueData1', 'UniqueTest1', '18', '29.39%', '41%', 'Data'], ['UniqueData2', 'UniqueTest2', '22.3', '44.4%', '42.3%', 'Data'], ['UniqueData2', 'UniqueTest2', '4', '44.2%', '43.4%', 'Data'], ['UniqueData2', 'UniqueTest2', '4.1', '49%', '42.7%', 'Data'], ['UniqueData3', 'UniqueTest1', '4.45', '49.5%', '42.42%', 'Data'], ['UniqueData3', 'UniqueTest1', '4.29', '20%', '42.3%', 'Data'], ['UniqueData3', 'UniqueTest1', '4.22', '25%', '41.2%', 'Data']]
预期输出如下所示:

[['UniqueData1', 'UniqueTest1', '13', '13.39%', '42.70%', 'Data', '#F8696B', '#F8696B', '#63BE7B'], ['UniqueData1', 'UniqueTest1', '14', '82%', '41.90%', 'Data', '#FFEB84', '#63BE7B', '#FFEB84'], ['UniqueData1', 'UniqueTest1', '18', '29.39%', '41%', 'Data', '#63BE7B', '#FFEB84', '#F8696B'], ['UniqueData2', 'UniqueTest2', '22.3', '44.40%', '42.30%', 'Data', '#63BE7B', '#FFEB84', '#F8696B'], ['UniqueData2', 'UniqueTest2', '4', '44.20%', '43.40%', 'Data', '#F8696B', '#F8696B', '#63BE7B'], ['UniqueData2', 'UniqueTest2', '4.1', '49%', '42.70%', 'Data', '#FFEB84', '#63BE7B', '#FFEB84'], ['UniqueData3', 'UniqueTest1', '4.45', '49.50%', '42.42%', 'Data', '#63BE7B', '#63BE7B', '#63BE7B'], ['UniqueData3', 'UniqueTest1', '4.29', '20%', '42.30%', 'Data', '#FFEB84', '#F8696B', '#FFEB84'], ['UniqueData3', 'UniqueTest1', '4.22', '25%', '41.20%', 'Data', '#F8696B', '#FFEB84', '#F8696B']]
UniqueData1,UniqueTest1,13,13.39%,42.70%,Data,#F8696B,#F8696B,#63BE7B
UniqueData1,UniqueTest1,14,82%,41.90%,Data,#FFEB84,#63BE7B,#FFEB84
UniqueData1,UniqueTest1,18,29.39%,41%,Data,#63BE7B,#FFEB84,#F8696B
UniqueData2,UniqueTest2,22.3,44.40%,42.30%,Data,#63BE7B,#FFEB84,#F8696B
UniqueData2,UniqueTest2,4,44.20%,43.40%,Data,#F8696B,#F8696B,#63BE7B
UniqueData2,UniqueTest2,4.1,49%,42.70%,Data,#FFEB84,#63BE7B,#FFEB84
UniqueData3,UniqueTest1,4.45,49.50%,42.42%,Data,#63BE7B,#63BE7B,#63BE7B
UniqueData3,UniqueTest1,4.29,20%,42.30%,Data,#FFEB84,#F8696B,#FFEB84
UniqueData3,UniqueTest1,4.22,25%,41.20%,Data,#F8696B,#FFEB84,#F8696B
import numpy as np

with open("testing.csv") as infile:
    lines = [line.rstrip().split(",") for line in infile]

def mapValues(values):
    values = [float(i.split('%')[0]) for i in values]
    colorMap = np.array(['#F8696B', '#F86E6C', '#F8736D', '#F8786E', '#F97E6F', '#F98370', '#F98871', '#FA8E72', '#FA9373', '#FA9874', '#FA9E75', '#FBA376', '#FBA877', '#FBAD78', '#FCB379', '#FCB87A', '#FCBD7B', '#FCC37C', '#FDC87D', '#FDCD7E', '#FDD37F', '#FED880', '#FEDD81', '#FEE382', '#FEE883', '#FCEB84', '#F6E984', '#F0E784', '#E9E583', '#E3E383', '#DCE182', '#D6E082', '#D0DE82', '#C9DC81', '#C3DA81', '#BDD881', '#B6D680', '#B0D580', '#AAD380', '#A3D17F', '#9DCF7F', '#96CD7E', '#90CB7E', '#8ACA7E', '#83C87D', '#7DC67D', '#77C47D', '#70C27C', '#6AC07C', '#63BE7B'])
    #colorMap = np.array(["low", "mid", "high"])
    values = np.asarray(values)
    _, bins = np.histogram(values, 49)
    mapped = np.digitize(values, bins)
    return list(colorMap[mapped - 1])

def mapAndAdd(finalList, tempList, v1,v2,v3):
    v1 = mapValues(v1)
    v2 = mapValues(v2)
    v3 = mapValues(v3)
    for i,j in enumerate(newList):
        finalList.append(j + [v1[i] , v2[i] , v3[i]])

uniqueDataSet = set()

finalList = []
for index, DataSet in enumerate(lines):
    if (DataSet[0] + DataSet[1]) in uniqueDataSet:
        v1.append(DataSet[2])
        v2.append(DataSet[3])
        v3.append(DataSet[4])

        newList.append(DataSet)
    else:
        if (index != 0):
            mapAndAdd(finalList, newList, v1,v2,v3)

        uniqueDataSet.add(DataSet[0] + DataSet[1])
        newList = [DataSet]
        v1 = [DataSet[2]]
        v2 = [DataSet[3]]
        v3 = [DataSet[4]]

mapAndAdd(finalList, newList, v1,v2,v3)

with open('testing_new.csv', 'wb') as new_csv:
    for line in finalList:
        new_csv.write(",".join(line) + "\r\n")

print finalList
UniqueData1,UniqueTest1,1,1,1,Data
UniqueData1,UniqueTest1,2,2,2,Data
UniqueData1,UniqueTest1,3,3,3,Data
UniqueData1,UniqueTest1,4,NA,4,Data
UniqueData1,UniqueTest1,5,5,5,Data
UniqueData1,UniqueTest1,,6,6,Data
UniqueData1,UniqueTest1,7,7,7,Data
UniqueData1,UniqueTest1,8,8,8,Data
UniqueData1,UniqueTest1,9,9,9,Data
[['UniqueData1', 'UniqueTest1', '1', '1', '1', 'Data', '#F8696B', '#F8696B', '#F8696B'], ['UniqueData1', 'UniqueTest1', '2', '2', '2', 'Data', '#F98871', '#F98871', '#F98871'], ['UniqueData1', 'UniqueTest1', '3', '3', '3', 'Data', '#FBA877', '#FBA877', '#FBA877'], ['UniqueData1', 'UniqueTest1', '4', 'NA', '4', 'Data', '#FDC87D', '#808080', '#FDC87D'], ['UniqueData1', 'UniqueTest1', '5', '5', '5', 'Data', '#FEE883', '#FEE883', '#FEE883'], ['UniqueData1', 'UniqueTest1', '', '6', '6', 'Data', '#808080', '#DCE182', '#DCE182'], ['UniqueData1', 'UniqueTest1', '7', '7', '7', 'Data', '#B6D680', '#B6D680', '#B6D680'], ['UniqueData1', 'UniqueTest1', '8', '8', '8', 'Data', '#90CB7E', '#90CB7E', '#90CB7E'], ['UniqueData1', 'UniqueTest1', '9', '9', '9', 'Data', '#63BE7B', '#63BE7B', '#63BE7B']]
UniqueData1,UniqueTest1,1,1,1,Data,#F8696B,#F8696B,#F8696B
UniqueData1,UniqueTest1,2,2,2,Data,#F98871,#F98871,#F98871
UniqueData1,UniqueTest1,3,3,3,Data,#FBA877,#FBA877,#FBA877
UniqueData1,UniqueTest1,4,NA,4,Data,#FDC87D,#808080,#FDC87D
UniqueData1,UniqueTest1,5,5,5,Data,#FEE883,#FEE883,#FEE883
UniqueData1,UniqueTest1,,6,6,Data,#808080,#DCE182,#DCE182
UniqueData1,UniqueTest1,7,7,7,Data,#B6D680,#B6D680,#B6D680
UniqueData1,UniqueTest1,8,8,8,Data,#90CB7E,#90CB7E,#90CB7E
UniqueData1,UniqueTest1,9,9,9,Data,#63BE7B,#63BE7B,#63BE7B
出于视觉目的,如果将其导出到csv文件中,其外观如下:

[['UniqueData1', 'UniqueTest1', '13', '13.39%', '42.70%', 'Data', '#F8696B', '#F8696B', '#63BE7B'], ['UniqueData1', 'UniqueTest1', '14', '82%', '41.90%', 'Data', '#FFEB84', '#63BE7B', '#FFEB84'], ['UniqueData1', 'UniqueTest1', '18', '29.39%', '41%', 'Data', '#63BE7B', '#FFEB84', '#F8696B'], ['UniqueData2', 'UniqueTest2', '22.3', '44.40%', '42.30%', 'Data', '#63BE7B', '#FFEB84', '#F8696B'], ['UniqueData2', 'UniqueTest2', '4', '44.20%', '43.40%', 'Data', '#F8696B', '#F8696B', '#63BE7B'], ['UniqueData2', 'UniqueTest2', '4.1', '49%', '42.70%', 'Data', '#FFEB84', '#63BE7B', '#FFEB84'], ['UniqueData3', 'UniqueTest1', '4.45', '49.50%', '42.42%', 'Data', '#63BE7B', '#63BE7B', '#63BE7B'], ['UniqueData3', 'UniqueTest1', '4.29', '20%', '42.30%', 'Data', '#FFEB84', '#F8696B', '#FFEB84'], ['UniqueData3', 'UniqueTest1', '4.22', '25%', '41.20%', 'Data', '#F8696B', '#FFEB84', '#F8696B']]
UniqueData1,UniqueTest1,13,13.39%,42.70%,Data,#F8696B,#F8696B,#63BE7B
UniqueData1,UniqueTest1,14,82%,41.90%,Data,#FFEB84,#63BE7B,#FFEB84
UniqueData1,UniqueTest1,18,29.39%,41%,Data,#63BE7B,#FFEB84,#F8696B
UniqueData2,UniqueTest2,22.3,44.40%,42.30%,Data,#63BE7B,#FFEB84,#F8696B
UniqueData2,UniqueTest2,4,44.20%,43.40%,Data,#F8696B,#F8696B,#63BE7B
UniqueData2,UniqueTest2,4.1,49%,42.70%,Data,#FFEB84,#63BE7B,#FFEB84
UniqueData3,UniqueTest1,4.45,49.50%,42.42%,Data,#63BE7B,#63BE7B,#63BE7B
UniqueData3,UniqueTest1,4.29,20%,42.30%,Data,#FFEB84,#F8696B,#FFEB84
UniqueData3,UniqueTest1,4.22,25%,41.20%,Data,#F8696B,#FFEB84,#F8696B
import numpy as np

with open("testing.csv") as infile:
    lines = [line.rstrip().split(",") for line in infile]

def mapValues(values):
    values = [float(i.split('%')[0]) for i in values]
    colorMap = np.array(['#F8696B', '#F86E6C', '#F8736D', '#F8786E', '#F97E6F', '#F98370', '#F98871', '#FA8E72', '#FA9373', '#FA9874', '#FA9E75', '#FBA376', '#FBA877', '#FBAD78', '#FCB379', '#FCB87A', '#FCBD7B', '#FCC37C', '#FDC87D', '#FDCD7E', '#FDD37F', '#FED880', '#FEDD81', '#FEE382', '#FEE883', '#FCEB84', '#F6E984', '#F0E784', '#E9E583', '#E3E383', '#DCE182', '#D6E082', '#D0DE82', '#C9DC81', '#C3DA81', '#BDD881', '#B6D680', '#B0D580', '#AAD380', '#A3D17F', '#9DCF7F', '#96CD7E', '#90CB7E', '#8ACA7E', '#83C87D', '#7DC67D', '#77C47D', '#70C27C', '#6AC07C', '#63BE7B'])
    #colorMap = np.array(["low", "mid", "high"])
    values = np.asarray(values)
    _, bins = np.histogram(values, 49)
    mapped = np.digitize(values, bins)
    return list(colorMap[mapped - 1])

def mapAndAdd(finalList, tempList, v1,v2,v3):
    v1 = mapValues(v1)
    v2 = mapValues(v2)
    v3 = mapValues(v3)
    for i,j in enumerate(newList):
        finalList.append(j + [v1[i] , v2[i] , v3[i]])

uniqueDataSet = set()

finalList = []
for index, DataSet in enumerate(lines):
    if (DataSet[0] + DataSet[1]) in uniqueDataSet:
        v1.append(DataSet[2])
        v2.append(DataSet[3])
        v3.append(DataSet[4])

        newList.append(DataSet)
    else:
        if (index != 0):
            mapAndAdd(finalList, newList, v1,v2,v3)

        uniqueDataSet.add(DataSet[0] + DataSet[1])
        newList = [DataSet]
        v1 = [DataSet[2]]
        v2 = [DataSet[3]]
        v3 = [DataSet[4]]

mapAndAdd(finalList, newList, v1,v2,v3)

with open('testing_new.csv', 'wb') as new_csv:
    for line in finalList:
        new_csv.write(",".join(line) + "\r\n")

print finalList
UniqueData1,UniqueTest1,1,1,1,Data
UniqueData1,UniqueTest1,2,2,2,Data
UniqueData1,UniqueTest1,3,3,3,Data
UniqueData1,UniqueTest1,4,NA,4,Data
UniqueData1,UniqueTest1,5,5,5,Data
UniqueData1,UniqueTest1,,6,6,Data
UniqueData1,UniqueTest1,7,7,7,Data
UniqueData1,UniqueTest1,8,8,8,Data
UniqueData1,UniqueTest1,9,9,9,Data
[['UniqueData1', 'UniqueTest1', '1', '1', '1', 'Data', '#F8696B', '#F8696B', '#F8696B'], ['UniqueData1', 'UniqueTest1', '2', '2', '2', 'Data', '#F98871', '#F98871', '#F98871'], ['UniqueData1', 'UniqueTest1', '3', '3', '3', 'Data', '#FBA877', '#FBA877', '#FBA877'], ['UniqueData1', 'UniqueTest1', '4', 'NA', '4', 'Data', '#FDC87D', '#808080', '#FDC87D'], ['UniqueData1', 'UniqueTest1', '5', '5', '5', 'Data', '#FEE883', '#FEE883', '#FEE883'], ['UniqueData1', 'UniqueTest1', '', '6', '6', 'Data', '#808080', '#DCE182', '#DCE182'], ['UniqueData1', 'UniqueTest1', '7', '7', '7', 'Data', '#B6D680', '#B6D680', '#B6D680'], ['UniqueData1', 'UniqueTest1', '8', '8', '8', 'Data', '#90CB7E', '#90CB7E', '#90CB7E'], ['UniqueData1', 'UniqueTest1', '9', '9', '9', 'Data', '#63BE7B', '#63BE7B', '#63BE7B']]
UniqueData1,UniqueTest1,1,1,1,Data,#F8696B,#F8696B,#F8696B
UniqueData1,UniqueTest1,2,2,2,Data,#F98871,#F98871,#F98871
UniqueData1,UniqueTest1,3,3,3,Data,#FBA877,#FBA877,#FBA877
UniqueData1,UniqueTest1,4,NA,4,Data,#FDC87D,#808080,#FDC87D
UniqueData1,UniqueTest1,5,5,5,Data,#FEE883,#FEE883,#FEE883
UniqueData1,UniqueTest1,,6,6,Data,#808080,#DCE182,#DCE182
UniqueData1,UniqueTest1,7,7,7,Data,#B6D680,#B6D680,#B6D680
UniqueData1,UniqueTest1,8,8,8,Data,#90CB7E,#90CB7E,#90CB7E
UniqueData1,UniqueTest1,9,9,9,Data,#63BE7B,#63BE7B,#63BE7B
正如您所看到的,它们都被赋予了3种十六进制颜色,在excel中,如果您将这些颜色应用于每个单元格,则会转换为:

[['UniqueData1', 'UniqueTest1', '13', '13.39%', '42.70%', 'Data', '#F8696B', '#F8696B', '#63BE7B'], ['UniqueData1', 'UniqueTest1', '14', '82%', '41.90%', 'Data', '#FFEB84', '#63BE7B', '#FFEB84'], ['UniqueData1', 'UniqueTest1', '18', '29.39%', '41%', 'Data', '#63BE7B', '#FFEB84', '#F8696B'], ['UniqueData2', 'UniqueTest2', '22.3', '44.40%', '42.30%', 'Data', '#63BE7B', '#FFEB84', '#F8696B'], ['UniqueData2', 'UniqueTest2', '4', '44.20%', '43.40%', 'Data', '#F8696B', '#F8696B', '#63BE7B'], ['UniqueData2', 'UniqueTest2', '4.1', '49%', '42.70%', 'Data', '#FFEB84', '#63BE7B', '#FFEB84'], ['UniqueData3', 'UniqueTest1', '4.45', '49.50%', '42.42%', 'Data', '#63BE7B', '#63BE7B', '#63BE7B'], ['UniqueData3', 'UniqueTest1', '4.29', '20%', '42.30%', 'Data', '#FFEB84', '#F8696B', '#FFEB84'], ['UniqueData3', 'UniqueTest1', '4.22', '25%', '41.20%', 'Data', '#F8696B', '#FFEB84', '#F8696B']]
UniqueData1,UniqueTest1,13,13.39%,42.70%,Data,#F8696B,#F8696B,#63BE7B
UniqueData1,UniqueTest1,14,82%,41.90%,Data,#FFEB84,#63BE7B,#FFEB84
UniqueData1,UniqueTest1,18,29.39%,41%,Data,#63BE7B,#FFEB84,#F8696B
UniqueData2,UniqueTest2,22.3,44.40%,42.30%,Data,#63BE7B,#FFEB84,#F8696B
UniqueData2,UniqueTest2,4,44.20%,43.40%,Data,#F8696B,#F8696B,#63BE7B
UniqueData2,UniqueTest2,4.1,49%,42.70%,Data,#FFEB84,#63BE7B,#FFEB84
UniqueData3,UniqueTest1,4.45,49.50%,42.42%,Data,#63BE7B,#63BE7B,#63BE7B
UniqueData3,UniqueTest1,4.29,20%,42.30%,Data,#FFEB84,#F8696B,#FFEB84
UniqueData3,UniqueTest1,4.22,25%,41.20%,Data,#F8696B,#FFEB84,#F8696B
import numpy as np

with open("testing.csv") as infile:
    lines = [line.rstrip().split(",") for line in infile]

def mapValues(values):
    values = [float(i.split('%')[0]) for i in values]
    colorMap = np.array(['#F8696B', '#F86E6C', '#F8736D', '#F8786E', '#F97E6F', '#F98370', '#F98871', '#FA8E72', '#FA9373', '#FA9874', '#FA9E75', '#FBA376', '#FBA877', '#FBAD78', '#FCB379', '#FCB87A', '#FCBD7B', '#FCC37C', '#FDC87D', '#FDCD7E', '#FDD37F', '#FED880', '#FEDD81', '#FEE382', '#FEE883', '#FCEB84', '#F6E984', '#F0E784', '#E9E583', '#E3E383', '#DCE182', '#D6E082', '#D0DE82', '#C9DC81', '#C3DA81', '#BDD881', '#B6D680', '#B0D580', '#AAD380', '#A3D17F', '#9DCF7F', '#96CD7E', '#90CB7E', '#8ACA7E', '#83C87D', '#7DC67D', '#77C47D', '#70C27C', '#6AC07C', '#63BE7B'])
    #colorMap = np.array(["low", "mid", "high"])
    values = np.asarray(values)
    _, bins = np.histogram(values, 49)
    mapped = np.digitize(values, bins)
    return list(colorMap[mapped - 1])

def mapAndAdd(finalList, tempList, v1,v2,v3):
    v1 = mapValues(v1)
    v2 = mapValues(v2)
    v3 = mapValues(v3)
    for i,j in enumerate(newList):
        finalList.append(j + [v1[i] , v2[i] , v3[i]])

uniqueDataSet = set()

finalList = []
for index, DataSet in enumerate(lines):
    if (DataSet[0] + DataSet[1]) in uniqueDataSet:
        v1.append(DataSet[2])
        v2.append(DataSet[3])
        v3.append(DataSet[4])

        newList.append(DataSet)
    else:
        if (index != 0):
            mapAndAdd(finalList, newList, v1,v2,v3)

        uniqueDataSet.add(DataSet[0] + DataSet[1])
        newList = [DataSet]
        v1 = [DataSet[2]]
        v2 = [DataSet[3]]
        v3 = [DataSet[4]]

mapAndAdd(finalList, newList, v1,v2,v3)

with open('testing_new.csv', 'wb') as new_csv:
    for line in finalList:
        new_csv.write(",".join(line) + "\r\n")

print finalList
UniqueData1,UniqueTest1,1,1,1,Data
UniqueData1,UniqueTest1,2,2,2,Data
UniqueData1,UniqueTest1,3,3,3,Data
UniqueData1,UniqueTest1,4,NA,4,Data
UniqueData1,UniqueTest1,5,5,5,Data
UniqueData1,UniqueTest1,,6,6,Data
UniqueData1,UniqueTest1,7,7,7,Data
UniqueData1,UniqueTest1,8,8,8,Data
UniqueData1,UniqueTest1,9,9,9,Data
[['UniqueData1', 'UniqueTest1', '1', '1', '1', 'Data', '#F8696B', '#F8696B', '#F8696B'], ['UniqueData1', 'UniqueTest1', '2', '2', '2', 'Data', '#F98871', '#F98871', '#F98871'], ['UniqueData1', 'UniqueTest1', '3', '3', '3', 'Data', '#FBA877', '#FBA877', '#FBA877'], ['UniqueData1', 'UniqueTest1', '4', 'NA', '4', 'Data', '#FDC87D', '#808080', '#FDC87D'], ['UniqueData1', 'UniqueTest1', '5', '5', '5', 'Data', '#FEE883', '#FEE883', '#FEE883'], ['UniqueData1', 'UniqueTest1', '', '6', '6', 'Data', '#808080', '#DCE182', '#DCE182'], ['UniqueData1', 'UniqueTest1', '7', '7', '7', 'Data', '#B6D680', '#B6D680', '#B6D680'], ['UniqueData1', 'UniqueTest1', '8', '8', '8', 'Data', '#90CB7E', '#90CB7E', '#90CB7E'], ['UniqueData1', 'UniqueTest1', '9', '9', '9', 'Data', '#63BE7B', '#63BE7B', '#63BE7B']]
UniqueData1,UniqueTest1,1,1,1,Data,#F8696B,#F8696B,#F8696B
UniqueData1,UniqueTest1,2,2,2,Data,#F98871,#F98871,#F98871
UniqueData1,UniqueTest1,3,3,3,Data,#FBA877,#FBA877,#FBA877
UniqueData1,UniqueTest1,4,NA,4,Data,#FDC87D,#808080,#FDC87D
UniqueData1,UniqueTest1,5,5,5,Data,#FEE883,#FEE883,#FEE883
UniqueData1,UniqueTest1,,6,6,Data,#808080,#DCE182,#DCE182
UniqueData1,UniqueTest1,7,7,7,Data,#B6D680,#B6D680,#B6D680
UniqueData1,UniqueTest1,8,8,8,Data,#90CB7E,#90CB7E,#90CB7E
UniqueData1,UniqueTest1,9,9,9,Data,#63BE7B,#63BE7B,#63BE7B

M4tini为“解决”上述问题而创建的代码是:

[['UniqueData1', 'UniqueTest1', '13', '13.39%', '42.70%', 'Data', '#F8696B', '#F8696B', '#63BE7B'], ['UniqueData1', 'UniqueTest1', '14', '82%', '41.90%', 'Data', '#FFEB84', '#63BE7B', '#FFEB84'], ['UniqueData1', 'UniqueTest1', '18', '29.39%', '41%', 'Data', '#63BE7B', '#FFEB84', '#F8696B'], ['UniqueData2', 'UniqueTest2', '22.3', '44.40%', '42.30%', 'Data', '#63BE7B', '#FFEB84', '#F8696B'], ['UniqueData2', 'UniqueTest2', '4', '44.20%', '43.40%', 'Data', '#F8696B', '#F8696B', '#63BE7B'], ['UniqueData2', 'UniqueTest2', '4.1', '49%', '42.70%', 'Data', '#FFEB84', '#63BE7B', '#FFEB84'], ['UniqueData3', 'UniqueTest1', '4.45', '49.50%', '42.42%', 'Data', '#63BE7B', '#63BE7B', '#63BE7B'], ['UniqueData3', 'UniqueTest1', '4.29', '20%', '42.30%', 'Data', '#FFEB84', '#F8696B', '#FFEB84'], ['UniqueData3', 'UniqueTest1', '4.22', '25%', '41.20%', 'Data', '#F8696B', '#FFEB84', '#F8696B']]
UniqueData1,UniqueTest1,13,13.39%,42.70%,Data,#F8696B,#F8696B,#63BE7B
UniqueData1,UniqueTest1,14,82%,41.90%,Data,#FFEB84,#63BE7B,#FFEB84
UniqueData1,UniqueTest1,18,29.39%,41%,Data,#63BE7B,#FFEB84,#F8696B
UniqueData2,UniqueTest2,22.3,44.40%,42.30%,Data,#63BE7B,#FFEB84,#F8696B
UniqueData2,UniqueTest2,4,44.20%,43.40%,Data,#F8696B,#F8696B,#63BE7B
UniqueData2,UniqueTest2,4.1,49%,42.70%,Data,#FFEB84,#63BE7B,#FFEB84
UniqueData3,UniqueTest1,4.45,49.50%,42.42%,Data,#63BE7B,#63BE7B,#63BE7B
UniqueData3,UniqueTest1,4.29,20%,42.30%,Data,#FFEB84,#F8696B,#FFEB84
UniqueData3,UniqueTest1,4.22,25%,41.20%,Data,#F8696B,#FFEB84,#F8696B
import numpy as np

with open("testing.csv") as infile:
    lines = [line.rstrip().split(",") for line in infile]

def mapValues(values):
    values = [float(i.split('%')[0]) for i in values]
    colorMap = np.array(['#F8696B', '#F86E6C', '#F8736D', '#F8786E', '#F97E6F', '#F98370', '#F98871', '#FA8E72', '#FA9373', '#FA9874', '#FA9E75', '#FBA376', '#FBA877', '#FBAD78', '#FCB379', '#FCB87A', '#FCBD7B', '#FCC37C', '#FDC87D', '#FDCD7E', '#FDD37F', '#FED880', '#FEDD81', '#FEE382', '#FEE883', '#FCEB84', '#F6E984', '#F0E784', '#E9E583', '#E3E383', '#DCE182', '#D6E082', '#D0DE82', '#C9DC81', '#C3DA81', '#BDD881', '#B6D680', '#B0D580', '#AAD380', '#A3D17F', '#9DCF7F', '#96CD7E', '#90CB7E', '#8ACA7E', '#83C87D', '#7DC67D', '#77C47D', '#70C27C', '#6AC07C', '#63BE7B'])
    #colorMap = np.array(["low", "mid", "high"])
    values = np.asarray(values)
    _, bins = np.histogram(values, 49)
    mapped = np.digitize(values, bins)
    return list(colorMap[mapped - 1])

def mapAndAdd(finalList, tempList, v1,v2,v3):
    v1 = mapValues(v1)
    v2 = mapValues(v2)
    v3 = mapValues(v3)
    for i,j in enumerate(newList):
        finalList.append(j + [v1[i] , v2[i] , v3[i]])

uniqueDataSet = set()

finalList = []
for index, DataSet in enumerate(lines):
    if (DataSet[0] + DataSet[1]) in uniqueDataSet:
        v1.append(DataSet[2])
        v2.append(DataSet[3])
        v3.append(DataSet[4])

        newList.append(DataSet)
    else:
        if (index != 0):
            mapAndAdd(finalList, newList, v1,v2,v3)

        uniqueDataSet.add(DataSet[0] + DataSet[1])
        newList = [DataSet]
        v1 = [DataSet[2]]
        v2 = [DataSet[3]]
        v3 = [DataSet[4]]

mapAndAdd(finalList, newList, v1,v2,v3)

with open('testing_new.csv', 'wb') as new_csv:
    for line in finalList:
        new_csv.write(",".join(line) + "\r\n")

print finalList
UniqueData1,UniqueTest1,1,1,1,Data
UniqueData1,UniqueTest1,2,2,2,Data
UniqueData1,UniqueTest1,3,3,3,Data
UniqueData1,UniqueTest1,4,NA,4,Data
UniqueData1,UniqueTest1,5,5,5,Data
UniqueData1,UniqueTest1,,6,6,Data
UniqueData1,UniqueTest1,7,7,7,Data
UniqueData1,UniqueTest1,8,8,8,Data
UniqueData1,UniqueTest1,9,9,9,Data
[['UniqueData1', 'UniqueTest1', '1', '1', '1', 'Data', '#F8696B', '#F8696B', '#F8696B'], ['UniqueData1', 'UniqueTest1', '2', '2', '2', 'Data', '#F98871', '#F98871', '#F98871'], ['UniqueData1', 'UniqueTest1', '3', '3', '3', 'Data', '#FBA877', '#FBA877', '#FBA877'], ['UniqueData1', 'UniqueTest1', '4', 'NA', '4', 'Data', '#FDC87D', '#808080', '#FDC87D'], ['UniqueData1', 'UniqueTest1', '5', '5', '5', 'Data', '#FEE883', '#FEE883', '#FEE883'], ['UniqueData1', 'UniqueTest1', '', '6', '6', 'Data', '#808080', '#DCE182', '#DCE182'], ['UniqueData1', 'UniqueTest1', '7', '7', '7', 'Data', '#B6D680', '#B6D680', '#B6D680'], ['UniqueData1', 'UniqueTest1', '8', '8', '8', 'Data', '#90CB7E', '#90CB7E', '#90CB7E'], ['UniqueData1', 'UniqueTest1', '9', '9', '9', 'Data', '#63BE7B', '#63BE7B', '#63BE7B']]
UniqueData1,UniqueTest1,1,1,1,Data,#F8696B,#F8696B,#F8696B
UniqueData1,UniqueTest1,2,2,2,Data,#F98871,#F98871,#F98871
UniqueData1,UniqueTest1,3,3,3,Data,#FBA877,#FBA877,#FBA877
UniqueData1,UniqueTest1,4,NA,4,Data,#FDC87D,#808080,#FDC87D
UniqueData1,UniqueTest1,5,5,5,Data,#FEE883,#FEE883,#FEE883
UniqueData1,UniqueTest1,,6,6,Data,#808080,#DCE182,#DCE182
UniqueData1,UniqueTest1,7,7,7,Data,#B6D680,#B6D680,#B6D680
UniqueData1,UniqueTest1,8,8,8,Data,#90CB7E,#90CB7E,#90CB7E
UniqueData1,UniqueTest1,9,9,9,Data,#63BE7B,#63BE7B,#63BE7B
现在如果我们使用csv数据:

[['UniqueData1', 'UniqueTest1', '13', '13.39%', '42.70%', 'Data', '#F8696B', '#F8696B', '#63BE7B'], ['UniqueData1', 'UniqueTest1', '14', '82%', '41.90%', 'Data', '#FFEB84', '#63BE7B', '#FFEB84'], ['UniqueData1', 'UniqueTest1', '18', '29.39%', '41%', 'Data', '#63BE7B', '#FFEB84', '#F8696B'], ['UniqueData2', 'UniqueTest2', '22.3', '44.40%', '42.30%', 'Data', '#63BE7B', '#FFEB84', '#F8696B'], ['UniqueData2', 'UniqueTest2', '4', '44.20%', '43.40%', 'Data', '#F8696B', '#F8696B', '#63BE7B'], ['UniqueData2', 'UniqueTest2', '4.1', '49%', '42.70%', 'Data', '#FFEB84', '#63BE7B', '#FFEB84'], ['UniqueData3', 'UniqueTest1', '4.45', '49.50%', '42.42%', 'Data', '#63BE7B', '#63BE7B', '#63BE7B'], ['UniqueData3', 'UniqueTest1', '4.29', '20%', '42.30%', 'Data', '#FFEB84', '#F8696B', '#FFEB84'], ['UniqueData3', 'UniqueTest1', '4.22', '25%', '41.20%', 'Data', '#F8696B', '#FFEB84', '#F8696B']]
UniqueData1,UniqueTest1,13,13.39%,42.70%,Data,#F8696B,#F8696B,#63BE7B
UniqueData1,UniqueTest1,14,82%,41.90%,Data,#FFEB84,#63BE7B,#FFEB84
UniqueData1,UniqueTest1,18,29.39%,41%,Data,#63BE7B,#FFEB84,#F8696B
UniqueData2,UniqueTest2,22.3,44.40%,42.30%,Data,#63BE7B,#FFEB84,#F8696B
UniqueData2,UniqueTest2,4,44.20%,43.40%,Data,#F8696B,#F8696B,#63BE7B
UniqueData2,UniqueTest2,4.1,49%,42.70%,Data,#FFEB84,#63BE7B,#FFEB84
UniqueData3,UniqueTest1,4.45,49.50%,42.42%,Data,#63BE7B,#63BE7B,#63BE7B
UniqueData3,UniqueTest1,4.29,20%,42.30%,Data,#FFEB84,#F8696B,#FFEB84
UniqueData3,UniqueTest1,4.22,25%,41.20%,Data,#F8696B,#FFEB84,#F8696B
import numpy as np

with open("testing.csv") as infile:
    lines = [line.rstrip().split(",") for line in infile]

def mapValues(values):
    values = [float(i.split('%')[0]) for i in values]
    colorMap = np.array(['#F8696B', '#F86E6C', '#F8736D', '#F8786E', '#F97E6F', '#F98370', '#F98871', '#FA8E72', '#FA9373', '#FA9874', '#FA9E75', '#FBA376', '#FBA877', '#FBAD78', '#FCB379', '#FCB87A', '#FCBD7B', '#FCC37C', '#FDC87D', '#FDCD7E', '#FDD37F', '#FED880', '#FEDD81', '#FEE382', '#FEE883', '#FCEB84', '#F6E984', '#F0E784', '#E9E583', '#E3E383', '#DCE182', '#D6E082', '#D0DE82', '#C9DC81', '#C3DA81', '#BDD881', '#B6D680', '#B0D580', '#AAD380', '#A3D17F', '#9DCF7F', '#96CD7E', '#90CB7E', '#8ACA7E', '#83C87D', '#7DC67D', '#77C47D', '#70C27C', '#6AC07C', '#63BE7B'])
    #colorMap = np.array(["low", "mid", "high"])
    values = np.asarray(values)
    _, bins = np.histogram(values, 49)
    mapped = np.digitize(values, bins)
    return list(colorMap[mapped - 1])

def mapAndAdd(finalList, tempList, v1,v2,v3):
    v1 = mapValues(v1)
    v2 = mapValues(v2)
    v3 = mapValues(v3)
    for i,j in enumerate(newList):
        finalList.append(j + [v1[i] , v2[i] , v3[i]])

uniqueDataSet = set()

finalList = []
for index, DataSet in enumerate(lines):
    if (DataSet[0] + DataSet[1]) in uniqueDataSet:
        v1.append(DataSet[2])
        v2.append(DataSet[3])
        v3.append(DataSet[4])

        newList.append(DataSet)
    else:
        if (index != 0):
            mapAndAdd(finalList, newList, v1,v2,v3)

        uniqueDataSet.add(DataSet[0] + DataSet[1])
        newList = [DataSet]
        v1 = [DataSet[2]]
        v2 = [DataSet[3]]
        v3 = [DataSet[4]]

mapAndAdd(finalList, newList, v1,v2,v3)

with open('testing_new.csv', 'wb') as new_csv:
    for line in finalList:
        new_csv.write(",".join(line) + "\r\n")

print finalList
UniqueData1,UniqueTest1,1,1,1,Data
UniqueData1,UniqueTest1,2,2,2,Data
UniqueData1,UniqueTest1,3,3,3,Data
UniqueData1,UniqueTest1,4,NA,4,Data
UniqueData1,UniqueTest1,5,5,5,Data
UniqueData1,UniqueTest1,,6,6,Data
UniqueData1,UniqueTest1,7,7,7,Data
UniqueData1,UniqueTest1,8,8,8,Data
UniqueData1,UniqueTest1,9,9,9,Data
[['UniqueData1', 'UniqueTest1', '1', '1', '1', 'Data', '#F8696B', '#F8696B', '#F8696B'], ['UniqueData1', 'UniqueTest1', '2', '2', '2', 'Data', '#F98871', '#F98871', '#F98871'], ['UniqueData1', 'UniqueTest1', '3', '3', '3', 'Data', '#FBA877', '#FBA877', '#FBA877'], ['UniqueData1', 'UniqueTest1', '4', 'NA', '4', 'Data', '#FDC87D', '#808080', '#FDC87D'], ['UniqueData1', 'UniqueTest1', '5', '5', '5', 'Data', '#FEE883', '#FEE883', '#FEE883'], ['UniqueData1', 'UniqueTest1', '', '6', '6', 'Data', '#808080', '#DCE182', '#DCE182'], ['UniqueData1', 'UniqueTest1', '7', '7', '7', 'Data', '#B6D680', '#B6D680', '#B6D680'], ['UniqueData1', 'UniqueTest1', '8', '8', '8', 'Data', '#90CB7E', '#90CB7E', '#90CB7E'], ['UniqueData1', 'UniqueTest1', '9', '9', '9', 'Data', '#63BE7B', '#63BE7B', '#63BE7B']]
UniqueData1,UniqueTest1,1,1,1,Data,#F8696B,#F8696B,#F8696B
UniqueData1,UniqueTest1,2,2,2,Data,#F98871,#F98871,#F98871
UniqueData1,UniqueTest1,3,3,3,Data,#FBA877,#FBA877,#FBA877
UniqueData1,UniqueTest1,4,NA,4,Data,#FDC87D,#808080,#FDC87D
UniqueData1,UniqueTest1,5,5,5,Data,#FEE883,#FEE883,#FEE883
UniqueData1,UniqueTest1,,6,6,Data,#808080,#DCE182,#DCE182
UniqueData1,UniqueTest1,7,7,7,Data,#B6D680,#B6D680,#B6D680
UniqueData1,UniqueTest1,8,8,8,Data,#90CB7E,#90CB7E,#90CB7E
UniqueData1,UniqueTest1,9,9,9,Data,#63BE7B,#63BE7B,#63BE7B

<强>我们得到以下错误,这是因为行6、列2上的空白单元格相同,行4、列3相同,其中有一个包含<代码> n< /代码> <强> >/p>的单元格。

Traceback (most recent call last):
  File "C:\testing.py", line 47, in <module>
    mapAndAdd(finalList, newList, v1,v2,v3)
  File "C:\testing.py", line 20, in mapAndAdd
    v1 = mapValues(v1)
  File "C:\testing.py", line 11, in mapValues
    values = [float(i.split('%')[0]) for i in values]
ValueError: could not convert string to float: 
出于视觉目的,其应如下所示:

[['UniqueData1', 'UniqueTest1', '13', '13.39%', '42.70%', 'Data', '#F8696B', '#F8696B', '#63BE7B'], ['UniqueData1', 'UniqueTest1', '14', '82%', '41.90%', 'Data', '#FFEB84', '#63BE7B', '#FFEB84'], ['UniqueData1', 'UniqueTest1', '18', '29.39%', '41%', 'Data', '#63BE7B', '#FFEB84', '#F8696B'], ['UniqueData2', 'UniqueTest2', '22.3', '44.40%', '42.30%', 'Data', '#63BE7B', '#FFEB84', '#F8696B'], ['UniqueData2', 'UniqueTest2', '4', '44.20%', '43.40%', 'Data', '#F8696B', '#F8696B', '#63BE7B'], ['UniqueData2', 'UniqueTest2', '4.1', '49%', '42.70%', 'Data', '#FFEB84', '#63BE7B', '#FFEB84'], ['UniqueData3', 'UniqueTest1', '4.45', '49.50%', '42.42%', 'Data', '#63BE7B', '#63BE7B', '#63BE7B'], ['UniqueData3', 'UniqueTest1', '4.29', '20%', '42.30%', 'Data', '#FFEB84', '#F8696B', '#FFEB84'], ['UniqueData3', 'UniqueTest1', '4.22', '25%', '41.20%', 'Data', '#F8696B', '#FFEB84', '#F8696B']]
UniqueData1,UniqueTest1,13,13.39%,42.70%,Data,#F8696B,#F8696B,#63BE7B
UniqueData1,UniqueTest1,14,82%,41.90%,Data,#FFEB84,#63BE7B,#FFEB84
UniqueData1,UniqueTest1,18,29.39%,41%,Data,#63BE7B,#FFEB84,#F8696B
UniqueData2,UniqueTest2,22.3,44.40%,42.30%,Data,#63BE7B,#FFEB84,#F8696B
UniqueData2,UniqueTest2,4,44.20%,43.40%,Data,#F8696B,#F8696B,#63BE7B
UniqueData2,UniqueTest2,4.1,49%,42.70%,Data,#FFEB84,#63BE7B,#FFEB84
UniqueData3,UniqueTest1,4.45,49.50%,42.42%,Data,#63BE7B,#63BE7B,#63BE7B
UniqueData3,UniqueTest1,4.29,20%,42.30%,Data,#FFEB84,#F8696B,#FFEB84
UniqueData3,UniqueTest1,4.22,25%,41.20%,Data,#F8696B,#FFEB84,#F8696B
import numpy as np

with open("testing.csv") as infile:
    lines = [line.rstrip().split(",") for line in infile]

def mapValues(values):
    values = [float(i.split('%')[0]) for i in values]
    colorMap = np.array(['#F8696B', '#F86E6C', '#F8736D', '#F8786E', '#F97E6F', '#F98370', '#F98871', '#FA8E72', '#FA9373', '#FA9874', '#FA9E75', '#FBA376', '#FBA877', '#FBAD78', '#FCB379', '#FCB87A', '#FCBD7B', '#FCC37C', '#FDC87D', '#FDCD7E', '#FDD37F', '#FED880', '#FEDD81', '#FEE382', '#FEE883', '#FCEB84', '#F6E984', '#F0E784', '#E9E583', '#E3E383', '#DCE182', '#D6E082', '#D0DE82', '#C9DC81', '#C3DA81', '#BDD881', '#B6D680', '#B0D580', '#AAD380', '#A3D17F', '#9DCF7F', '#96CD7E', '#90CB7E', '#8ACA7E', '#83C87D', '#7DC67D', '#77C47D', '#70C27C', '#6AC07C', '#63BE7B'])
    #colorMap = np.array(["low", "mid", "high"])
    values = np.asarray(values)
    _, bins = np.histogram(values, 49)
    mapped = np.digitize(values, bins)
    return list(colorMap[mapped - 1])

def mapAndAdd(finalList, tempList, v1,v2,v3):
    v1 = mapValues(v1)
    v2 = mapValues(v2)
    v3 = mapValues(v3)
    for i,j in enumerate(newList):
        finalList.append(j + [v1[i] , v2[i] , v3[i]])

uniqueDataSet = set()

finalList = []
for index, DataSet in enumerate(lines):
    if (DataSet[0] + DataSet[1]) in uniqueDataSet:
        v1.append(DataSet[2])
        v2.append(DataSet[3])
        v3.append(DataSet[4])

        newList.append(DataSet)
    else:
        if (index != 0):
            mapAndAdd(finalList, newList, v1,v2,v3)

        uniqueDataSet.add(DataSet[0] + DataSet[1])
        newList = [DataSet]
        v1 = [DataSet[2]]
        v2 = [DataSet[3]]
        v3 = [DataSet[4]]

mapAndAdd(finalList, newList, v1,v2,v3)

with open('testing_new.csv', 'wb') as new_csv:
    for line in finalList:
        new_csv.write(",".join(line) + "\r\n")

print finalList
UniqueData1,UniqueTest1,1,1,1,Data
UniqueData1,UniqueTest1,2,2,2,Data
UniqueData1,UniqueTest1,3,3,3,Data
UniqueData1,UniqueTest1,4,NA,4,Data
UniqueData1,UniqueTest1,5,5,5,Data
UniqueData1,UniqueTest1,,6,6,Data
UniqueData1,UniqueTest1,7,7,7,Data
UniqueData1,UniqueTest1,8,8,8,Data
UniqueData1,UniqueTest1,9,9,9,Data
[['UniqueData1', 'UniqueTest1', '1', '1', '1', 'Data', '#F8696B', '#F8696B', '#F8696B'], ['UniqueData1', 'UniqueTest1', '2', '2', '2', 'Data', '#F98871', '#F98871', '#F98871'], ['UniqueData1', 'UniqueTest1', '3', '3', '3', 'Data', '#FBA877', '#FBA877', '#FBA877'], ['UniqueData1', 'UniqueTest1', '4', 'NA', '4', 'Data', '#FDC87D', '#808080', '#FDC87D'], ['UniqueData1', 'UniqueTest1', '5', '5', '5', 'Data', '#FEE883', '#FEE883', '#FEE883'], ['UniqueData1', 'UniqueTest1', '', '6', '6', 'Data', '#808080', '#DCE182', '#DCE182'], ['UniqueData1', 'UniqueTest1', '7', '7', '7', 'Data', '#B6D680', '#B6D680', '#B6D680'], ['UniqueData1', 'UniqueTest1', '8', '8', '8', 'Data', '#90CB7E', '#90CB7E', '#90CB7E'], ['UniqueData1', 'UniqueTest1', '9', '9', '9', 'Data', '#63BE7B', '#63BE7B', '#63BE7B']]
UniqueData1,UniqueTest1,1,1,1,Data,#F8696B,#F8696B,#F8696B
UniqueData1,UniqueTest1,2,2,2,Data,#F98871,#F98871,#F98871
UniqueData1,UniqueTest1,3,3,3,Data,#FBA877,#FBA877,#FBA877
UniqueData1,UniqueTest1,4,NA,4,Data,#FDC87D,#808080,#FDC87D
UniqueData1,UniqueTest1,5,5,5,Data,#FEE883,#FEE883,#FEE883
UniqueData1,UniqueTest1,,6,6,Data,#808080,#DCE182,#DCE182
UniqueData1,UniqueTest1,7,7,7,Data,#B6D680,#B6D680,#B6D680
UniqueData1,UniqueTest1,8,8,8,Data,#90CB7E,#90CB7E,#90CB7E
UniqueData1,UniqueTest1,9,9,9,Data,#63BE7B,#63BE7B,#63BE7B

给你,又一次尝试“解决”它


嗯,有趣的是你是如何解决这个问题的。我尝试了几件事,包括使用numpy的
np.NaN
函数,但都没用。这工作得非常完美,我可以调整我的其他代码,使其能够处理空白数据。