选择具有所需 data_type 的 pandas 系列并就地应用函数的方法

pye*_*biz 2 python python-3.x pandas

我有一个包含许多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
Run Code Online (Sandbox Code Playgroud)

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”。

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

WeN*_*Ben 5

我认为应该是“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
Run Code Online (Sandbox Code Playgroud)

更多信息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
Run Code Online (Sandbox Code Playgroud)