Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫";其中;功能似乎没有短路_Python_Pandas_Dataframe - Fatal编程技术网

Python 熊猫";其中;功能似乎没有短路

Python 熊猫";其中;功能似乎没有短路,python,pandas,dataframe,Python,Pandas,Dataframe,我可能误解了这是怎么回事。 我感到惊讶的是,考虑到这个数据框架: A B C D 0 9.0 Nonnumeric 9.0 2 9.0 Num0a 9.0 这确实出现短路(--良好!): 但这并不(--糟糕!): (由于不存在短路,因此给出了除零误差): 错误是: self = (df["C"].str[-2:].apply(lambda x: int(x, 16))), ValueError: invalid lite

我可能误解了这是怎么回事。 我感到惊讶的是,考虑到这个数据框架:

A   B      C            D
0   9.0    Nonnumeric   9.0
2   9.0    Num0a        9.0
这确实出现短路(--良好!):

但这并不(--糟糕!): (由于不存在短路,因此给出了除零误差):

错误是:

self = (df["C"].str[-2:].apply(lambda x: int(x, 16))),
ValueError: invalid literal for int() with base 16: 'ic'

不,即使第一种方法也不会短路。在计算结果之前,必须先计算两个操作数。也就是说,这是计算出来的

i = dfzero["A"] != 0
i

0    False
1     True
Name: A, dtype: bool
这也是:

j = 1 / dfzero['A']
j

0         inf
1    0.500000
Name: A, dtype: float64
这句话实际上是:

pd.DataFrame.where(i, j, 0)
第二个也一样。这种行为是一贯的

您是否希望出现
零错误
?使用numpy或pandas不会得到这样的结果,因为这些库假设您知道在计算这些量时您在做什么


这里的选项是预计算掩码,然后仅计算这些行的结果

m = df["C"].str.len() == 5
df['D'] = df.loc[m, 'C'].str[-2:].apply(lambda x: int(x, 16))

df

   A    B           C     D
0  0  9.0  Nonnumeric   NaN
1  2  9.0       Num0a  10.0

如果您想填写NAN,请使用
df.loc[~m,'D']=fill_value

谢谢,这很有意义,而且不要介意下面的警告:我通过复制到具有不同名称的新数据帧来摆脱它。这是可行的,但我得到了令人恐惧的设置WithCopyWarning(即使我使用的是.loc[row\u indexer,col\u indexer]):设置WithCopyWarning:试图在数据帧切片的副本上设置值。尝试改用.loc[row\u indexer,col\u indexer]=value
pd.DataFrame.where(i, j, 0)
m = df["C"].str.len() == 5
df['D'] = df.loc[m, 'C'].str[-2:].apply(lambda x: int(x, 16))

df

   A    B           C     D
0  0  9.0  Nonnumeric   NaN
1  2  9.0       Num0a  10.0