首页 > 解决方案 > 选择具有所需数据类型的熊猫系列并就地应用功能的方法

问题描述

我有一个包含许多float64,int8object数据类型列/系列的数据框。我想根据数据类型应用一组函数,但要到位。我无法做到这一点。我可以根据索引将列分开data_type并连接回来。但我想知道是否有办法在不分离的情况下做到这一点。

df1 = pd.DataFrame(np.random.randn(3, 3))
df2 = pd.DataFrame({'A': ['A0', 'A1', 'A2'],
                        'B': ['B0', 'B1', 'B2']},
                        index=[0, 1, 2] )
df=pd.concat ([df1,df2])
df.dtypes
# 0    float64
# 1    float64
# 2    float64
# A     object
# B     object
# dtype: object

df.select_dtypes(include = ["float64"]).apply(lambda x: x*x).dropna()

给我一个新的数据框。

df.select_dtypes(include = ["float64"]) = df.select_dtypes(include = ["float64"]).apply(lambda x: x*x)

SyntaxError: can't assign to function call

尝试并做到这一点的荒谬尝试。我意识到当双方都有不同的系列时,我要求分配自动将“lhs”映射到“rhs”。

有没有办法就地执行此操作。

标签: pythonpython-3.xpandas

解决方案


我认为应该是“float64”而不是“int64”

df.loc[:,df.select_dtypes(include = ["float64"]).columns] = df.select_dtypes(include = ["float64"]).apply(lambda x: x*x)
df
Out[117]: 
          0         1         2    A    B
0  0.232743  0.107359  1.512470  NaN  NaN
1  0.831272  1.935141  0.010660  NaN  NaN
2  0.017718  0.078454  0.056315  NaN  NaN
0       NaN       NaN       NaN   A0   B0
1       NaN       NaN       NaN   A1   B1
2       NaN       NaN       NaN   A2   B2

更多信息update

df.update(df.select_dtypes(include = ["float64"]).apply(lambda x: x*x))
df
Out[139]: 
          0         1         2    A    B
0  0.074513  0.679018  0.070407  NaN  NaN
1  0.748732  0.004991  0.591979  NaN  NaN
2  0.006658  1.934269  0.106463  NaN  NaN
0       NaN       NaN       NaN   A0   B0
1       NaN       NaN       NaN   A1   B1
2       NaN       NaN       NaN   A2   B2

推荐阅读