Pandas 映射到 TRUE/FALSE 作为字符串,而不是布尔值

Posted

技术标签:

【中文标题】Pandas 映射到 TRUE/FALSE 作为字符串,而不是布尔值【英文标题】:Pandas mapping to TRUE/FALSE as String, not Boolean 【发布时间】:2017-08-04 22:47:24 【问题描述】:

当我尝试将 pandas 数据框中的某些列从“0”和“1”转换为“TRUE”和“FALSE”时,pandas 会自动将 dtype 检测为布尔值。我想将 dtype 保留为字符串,字符串为 'TRUE' 和 'FALSE'。

见下面的代码:

booleanColumns = pandasDF.select_dtypes(include=[bool]).columns.values.tolist()
booleanDictionary = '1': 'TRUE', '0': 'FALSE'

pandasDF.to_string(columns = booleanColumns)

for column in booleanColumns:
    pandasDF[column].map(booleanDictionary)

不幸的是,python 使用最后一个操作自动将 dtype 转换为 boolean。我怎样才能防止这种情况发生?

【问题讨论】:

【参考方案1】:

如果需要替换 booleanTrueFalse:

booleandf = pandasDF.select_dtypes(include=[bool])
booleanDictionary = True: 'TRUE', False: 'FALSE'

for column in booleandf:
    pandasDF[column] = pandasDF[column].map(booleanDictionary)

示例:

pandasDF = pd.DataFrame('A':[True,False,True],
                   'B':[4,5,6],
                   'C':[False,True,False])

print (pandasDF)
       A  B      C
0   True  4  False
1  False  5   True
2   True  6  False

booleandf = pandasDF.select_dtypes(include=[bool])
booleanDictionary = True: 'TRUE', False: 'FALSE'

#loop by df is loop by columns, same as for column in booleandf.columns:
for column in booleandf:
    pandasDF[column] = pandasDF[column].map(booleanDictionary)

print (pandasDF)
       A  B      C
0   TRUE  4  FALSE
1  FALSE  5   TRUE
2   TRUE  6  FALSE

编辑:

replace by dict 的更简单解决方案:

booleanDictionary = True: 'TRUE', False: 'FALSE'
pandasDF = pandasDF.replace(booleanDictionary)
print (pandasDF)
       A  B      C
0   TRUE  4  FALSE
1  FALSE  5   TRUE
2   TRUE  6  FALSE

【讨论】:

请注意带有替换的更简单的解决方案 - 将 .replace() 应用于 int 列将导致将 0 和 1 替换为布尔值:(

以上是关于Pandas 映射到 TRUE/FALSE 作为字符串,而不是布尔值的主要内容,如果未能解决你的问题,请参考以下文章

Pandas 将 True 列转换为列值

用 True/False 替换 pandas 数据框所有列的整数

获取 pandas 布尔系列为 True 的索引列表

使用字典作为参数映射 Pandas 系列,其中值是元组

使用 np.where() 在 pandas 数据框中将 True/False 值更改为离散值

要检查 Pandas Dataframe 列的 TRUE/FALSE,如果 TRUE 检查另一列是不是满足条件并生成具有值 PASS/FAIL 的新列