web-dev-qa-db-ja.com

Pandasブールではなく文字列としてTRUE / FALSEにマッピング

pandas dataframe from '0' and '1' to 'TRUE' and 'FALSE'の一部の列を変換しようとすると、pandasは自動的にdtypeを検出しますas boolean。私は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をブール値に自動的に変換します。これを防ぐにはどうすればよいですか?

10
Dendrobates

必要に応じて、booleanの値TrueFalseを置き換えます。

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 による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
21
jezrael