如果该行/列不是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
。
答案 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中使用数字数据时,您应该使用矢量化计算,如下所述。
您可能只需要考虑几种情况:
如果您的系列为float
,即df['LENGTH'].dtype
返回float
类型,请勿执行任何转换或检查。只需使用:
df['LENGTH'] *= 12
如果您的系列是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