dataframe df,df.column中的某些列存储为数据类型int64。
值均为1或0。
有没有办法用布尔值替换这些值?
答案 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,那么我的所有数字列都会变成布尔值。