Python 使用reduce选项在空数据帧上调用apply会更改数据类型
我知道即使对于空数据帧,也会调用apply方法。当apply方法内部出现错误时,它不会被传播。我正在查看这个stackoverflow链接,它建议使用Python 使用reduce选项在空数据帧上调用apply会更改数据类型,python,pandas,dataframe,Python,Pandas,Dataframe,我知道即使对于空数据帧,也会调用apply方法。当apply方法内部出现错误时,它不会被传播。我正在查看这个stackoverflow链接,它建议使用reduce选项,以便不调用apply函数。 考虑这个例子,在Col1中,所有值都小于10。因此,数据帧是空的。当我使用reduce选项时,col2的数据类型被更改。它将数字转换为小数 d = {'col1': [1, 2], 'col2': [3, 4]} df = pd.DataFrame(data=d) mask =
reduce
选项,以便不调用apply函数。
考虑这个例子,在Col1中,所有值都小于10。因此,数据帧是空的。当我使用reduce选项时,col2的数据类型被更改。它将数字转换为小数
d = {'col1': [1, 2], 'col2': [3, 4]}
df = pd.DataFrame(data=d)
mask = df["col1"] > 10
df.loc[mask, "col2"] = df[mask].apply(lambda x: x+2, axis=1, result_type='reduce')
print(df)
预期产量
col1 col2
0 1 3
1 2 4
实际产量:
col1 col2
0 1 3.0
1 2 4.0
我不知道为什么它会把整数转换成小数。有人知道如何避免这种情况吗?您可以使用
pd.to\u numeric()
向下转换为整数
如果我找到更好的方法,我会更新这个
若要避免浮点转换,请使用
df[mask].apply(lambda x:x+2,axis=1,result\u type='reduce').astype(int)
若要了解发生浮点的原因,请执行axis=0
,您将看到具有typefloat64
的NaN
的介绍。以类似的方式,当您执行axis=1
时,输出中没有行,但类型已转换为float64
简单地df.loc[mask,“col2”]=df[mask].apply(lambda x:x+2,axis=1,result\u type='reduce')。astype(int)
应执行此任务感谢@meW提供详细解释。
>>> import pandas as pd
>>> d = {'col1': [1, 2], 'col2': [3, 4]}
>>> df = pd.DataFrame(data=d)
>>> mask = df["col1"] > 10
>>> df.loc[mask, "col2"] = df[mask].apply(lambda x: x+2, axis=1, result_type='reduce')
>>>
>>> df
col1 col2
0 1 3.0
1 2 4.0
>>>
>>> pd.to_numeric(df.col2, downcast='integer')
0 3
1 4
Name: col2, dtype: int8
>>>
>>> df.col2 = pd.to_numeric(df.col2, downcast='integer')
>>> df
col1 col2
0 1 3
1 2 4
>>>