我有一个14行× 1500列的数据框,其中只包含数值。我想应用一个简单的条件,如果整个数据框中的任何值超过某个数字,比如25,那么将这些值替换为1,否则替换为0。我已经找到了一些解决方案,我可以在哪里执行这样的操作,但我已经指定了列名,但我找不到任何解决方案,我可以在整个数据框架上执行一个条件。
df[0.0] = df[0.0].apply(lambda x: 1 if x >=25 else 0)
这适用于特定列,但
df = df[:,:].apply(lambda x: 1 if x >=25 else 0)
是行不通的。有人能帮忙吗?
您可以使用pandas.DataFrame.applymap
将函数应用于以下方式的每个元素
import pandas as pd
df = pd.DataFrame({'col1':[0,10,100],'col2':[0,50,500]})
df2 = df.applymap(lambda x: 1 if x >=25 else 0)
print(df2)
输出col1 col2
0 0 0
1 0 1
2 1 1
在这种情况下你可以用另一种方式得到df2
也就是
df2 = (df >= 25).astype(int)
它首先创建pandas.DataFrame
的布尔值,然后将其转换为int
s (False
到0
,True
到1
)
你可以试试
df = np.where(df >= 25, 1, 0)
这应该可以让你动态地找到x>
data = {
'Column1' : [1, 26, 3, 27],
'Column2' : [25, 26, 1, 1]
}
df = pd.DataFrame(data)
df_new = pd.DataFrame(np.where(df > 25, 1, 0), columns = df.columns)
df_new
与applymap()
相关联的函数应用于给定DataFrame的所有元素,因此applymap()
方法仅为DataFrame定义。类似地,与apply()
方法相关联的函数可以应用于DataFrame或Series的所有元素,因此apply()
方法是为Series和DataFrame对象定义的。
map()
方法只能为Pandas中的Series对象定义。
所以,你必须使用applymap()
而不是apply()
。