pandas数据帧将INT64列转换为布尔值

时间:2013-09-11 18:01:01

标签: python numpy boolean pandas

dataframe df,df.column中的某些列存储为数据类型int64。

值均为1或0。

有没有办法用布尔值替换这些值?

2 个答案:

答案 0 :(得分:26)

df['column_name'] = df['column_name'].astype('bool')

例如:

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.random_integers(0,1,size=5), 
                  columns=['foo'])
print(df)
#    foo
# 0    0
# 1    1
# 2    0
# 3    1
# 4    1

df['foo'] = df['foo'].astype('bool')
print(df)

产量

     foo
0  False
1   True
2  False
3   True
4   True

根据column_names列表,您可以使用以下内容将多列转换为bool dtype:

df[column_names] = df[column_names].astype(bool)

如果您没有列名列表,但希望转换所有数字列,那么您可以使用

column_names = df.select_dtypes(include=[np.number]).columns
df[column_names] = df[column_names].astype(bool)

答案 1 :(得分:0)

参考:Stack Overflow unutbu(1月9日13:25),BrenBarn(2017年9月18日)

我有像年龄和ID这样的数字列,我不想将其转换为布尔值。因此,在确定unutbu显示的数字列之后,我过滤掉了最多超过1的列。

column_names = df.select_dtypes(include = [np.number])。columns#code at unutbu

m = df [df.select_dtypes(include = [np.number])。columns] .max()。reset_index(name ='max')#重新提取数值类型的列(使用awesome np.number1 :))然后获取最大值并将它们存储在临时变量m。

n = m.loc [m ['max'] == 1,'max']#然后我在另一个帖子中显示了像BrenBarn这样的过滤器,以提取max == 1的行并将其存储在临时变量n。

p = column_names [n.index] #I然后从n中提取行的索引并将它们存储在临时变量p中。这些索引与原始数据框'df'的索引相同。

df [p] = df [p] .astype(bool)#I然后使用来自unutbu的最后一段代码调用存储在我的变量p中的max == 1的行的索引。如果我直接使用column_names而不是p,那么我的所有数字列都会变成布尔值。