应用于Dataframe返回所有无

时间:2018-06-08 15:01:02

标签: python pandas apply series

如果该行/列不是None,我试图将列的值乘以12。

我试过了:

def length_inches(x):
    if x is not None:
        int(x)*12

df['LENGTH'] = df['LENGTH'].notnull().apply(length_inches)

我试过了:

def length_inches(x):
    int(x)*12

df['LENGTH'] = df['LENGTH'].notnull().apply(length_inches)

但是它会在长度列中返回所有None

这是我的数据框:

                                          DESCRIPTION  LENGTH  WIDTH   GAUGE  \
0   STRETCH FILM BENCHMARK GREEN   28.5" X 10000' ...   10000  28.5      51    
1   STRETCH FILM TORQUE            16X1500 4RL/CS ...    1500    16    31.5    
2   STRETCH FILM TORQUE            16X1500 4RL/CS ...    1500    16    31.5    
3   STRETCH FILM TORQUE            16X1500 4RL/CS ...    1500    16    31.5    
4   STRETCH FILM BENCHMARK OPTIMUM 30 X 7500'  20R...    7500    30      61    
5   STRETCH FILM TORQUE            16X1500 4RL/CS ...    1500    16    31.5    
6   STRETCH FILM TORQUE            16X1500 4RL/CS ...    1500    16    31.5    
7   STRETCH FILM BENCHMARK OPTIMUM 20" X 7500'  40...    None   None    None   

如何在此数据框中考虑None,并仍在df['LENGTH']

上运行计算

该系列的类型为LENGTH object

如果该行为None,我只想pass

4 个答案:

答案 0 :(得分:2)

你不能return任何功能(你return ed ):

def length_inches(x):
    if x is not None:
        return int(x)*12
    else:
        return None

df['LENGTH'].apply(length_inches)

答案 1 :(得分:2)

pd.Series.notnull输出一个布尔系列,具体取决于您的系列是否为空。它不会为非空值过滤系列。实际上,这种显式过滤不是必需的。在Pandas中使用数字数据时,您应该使用矢量化计算,如下所述。

您可能只需要考虑几种情况:

1。 float series =>没有转换

如果您的系列为float,即df['LENGTH'].dtype返回float类型,请勿执行任何转换或检查。只需使用:

df['LENGTH'] *= 12

2。对象系列=>使用pd.to_numeric

如果您的系列是object类型,请先将其转换为float

df['LENGTH'] = pd.to_numeric(df['LENGTH'], errors='coerce')
df['LENGTH'] *= 12
另一方面,带有自定义函数的

pd.Series.apply没有矢量化:在内部,它只是一个薄薄的环路。避免像瘟疫一样。

答案 2 :(得分:1)

您必须在功能结束时返回一个值。

尝试:

{{1}}

答案 3 :(得分:1)

 df['LENGTH']=df['LENGTH'].replace('None',0).astype(int)*12