我正在使用Python 2.7清理一些人类分类数据,主要是使用pandas,但使用numpy.isreal()
来检查浮点数,因为有些人显然在'background_color'
等字段中输入了浮点数。无论如何,我发布了一个示例,说明使用我当前设置的一种颜色的样子,在循环结束时它只是看起来非常Python,{{1} }是blues
不区分大小写background_color
的所有索引的列表:
'BLUE'
似乎我可以使用map函数来使这更像Pythonic和更漂亮。就像我说的,它按预期运行,但似乎也是...... C或Java用Python编写。提前感谢任何回复。
-Edit:我删除了计数,因为它是来自旧循环的遗物
答案 0 :(得分:0)
您可以使用大写
创建一个bew列imageData['background_color_2'] = map(lambda x: x.upper(), imageData['background_color'].astype(str))
subset = imageData[imageData['background_color_2']=='BLUE']
为计数
len(subset['background_color'])
答案 1 :(得分:0)
您可以定义一个lambda函数,该函数返回具有特定字符串值
的行的索引getRowIndexWithStringColor = lambda df, color: [i for i in range(df.shape[0]) if (not np.isreal(df.loc[i,'background_color'])) and df.loc[i,'background_color'].upper()==color)]
rowIndexWithBlue = getRowIndexWithStringColor(imageData, 'BLUE')
答案 2 :(得分:0)
作为一般规则,如果你在大熊猫中循环,你做错了。
应该看起来像这样(虽然未经测试,所以你需要调整它!):
strings = (~imageData.background_color.apply(np.isreal))
blue = (imageData.background_color.str.upper()=="BLUE")
blueshapes = imageData[strings & blue].index
答案 3 :(得分:0)
谢谢大家!我使用了对Steven G的答案的一个小修改,我将所有这些都备份在一个.csv大师中,所以我没有使用其等效字符串覆盖background_color
列的任何选项。任何非sring条目无论如何都是无效的,但它们并不是唯一的,所以我会在连接所有颜色的索引之后将它们作为剩余索引发现。每个列表将如下提取:
imageData['background_color']=map(lambda x: x.upper(), imageData['background_color'].astype(str))
blueShapes=imageData[imageData['background_color']=='BLUE'].index
答案 4 :(得分:0)
我会把它变成一个函数并返回一个数组。
Google:Python的禅宗
为您提供快速参考python list/dict/set over map/filter。
更好的可读性和更清晰的代码。
def colorShapes(color):
return [i
for i in range(imageData.shape[0])
if not(np.isreal(imageData.loc[i, 'background_color'].upper() == color
and imageData.loc[i, 'background_color'].upper() == color]