Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.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 错误:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。无法更新数据帧列_Python_Dataframe - Fatal编程技术网

Python 错误:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。无法更新数据帧列

Python 错误:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。无法更新数据帧列,python,dataframe,Python,Dataframe,我有一个数据帧df,它具有以下值: activityType activity_preferance userID agashi1996 joinClub Nan agashi1998 post Nan agashi1998 post Nan agashi1998 post Nan agashi1994 followuser Nan userID列是此处的索引 如果activityType分别为joi

我有一个数据帧df,它具有以下值:

           activityType activity_preferance
userID      
agashi1996  joinClub    Nan
agashi1998  post        Nan
agashi1998  post        Nan
agashi1998  post        Nan
agashi1994  followuser  Nan
userID列是此处的索引

如果activityType分别为joinClub、post、followuser,我想用1、2和3填充activity_Preference列

我写了这段代码:

for i,row in df_activity_filter.iterrows():
    if (df_activity_filter.loc[i,'activityType'] == 'joinClub'):
        df_activity_filter.loc[i,'activity_preferance'] = 1
    elif (df_activity_filter.loc[i,'activityType'] == 'post'):
        df_activity_filter.loc[i,'activity_preferance'] = 2
    elif (df_activity_filter.loc[i,'activityType'] == 'followuser'):
        df_activity_filter.loc[i,'activity_preferance'] = 3
我得到一个错误:

ValueError:序列的真值不明确。使用a.empty、a.bool、a.item、a.any或a.all

所需的数据帧/输出应如下所示:

           activityType activity_preferance
userID      
agashi1996  joinClub    1
agashi1998  post        2
agashi1998  post        2
agashi1998  post        2
agashi1994  followuser  3
>>> print(ser)

0  True
1  False
2  True
3  True
4  False
...
有什么帮助吗?

循环非常慢。您应在此处使用:

与其他解决方案的性能比较: 我的解决方案:

In [1582]: %timeit np.select(conditions, choices)
45.5 µs ± 1.84 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
In [1584]: %timeit df['activityType'].map(mapping)
401 µs ± 5.09 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [1590]: %timeit df.activityType.replace({'joinClub':1,'post':2,'followuser':3})
490 µs ± 20.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [1585]: %timeit df['activityType'].apply(lambda x: 1 if x=='joinClub' else None)
114 µs ± 1.56 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
@Djib2011的解决方案:

In [1582]: %timeit np.select(conditions, choices)
45.5 µs ± 1.84 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
In [1584]: %timeit df['activityType'].map(mapping)
401 µs ± 5.09 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [1590]: %timeit df.activityType.replace({'joinClub':1,'post':2,'followuser':3})
490 µs ± 20.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [1585]: %timeit df['activityType'].apply(lambda x: 1 if x=='joinClub' else None)
114 µs ± 1.56 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
@JenilDave的解决方案:

In [1582]: %timeit np.select(conditions, choices)
45.5 µs ± 1.84 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
In [1584]: %timeit df['activityType'].map(mapping)
401 µs ± 5.09 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [1590]: %timeit df.activityType.replace({'joinClub':1,'post':2,'followuser':3})
490 µs ± 20.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [1585]: %timeit df['activityType'].apply(lambda x: 1 if x=='joinClub' else None)
114 µs ± 1.56 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
@yashjain的解决方案:

In [1582]: %timeit np.select(conditions, choices)
45.5 µs ± 1.84 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
In [1584]: %timeit df['activityType'].map(mapping)
401 µs ± 5.09 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [1590]: %timeit df.activityType.replace({'joinClub':1,'post':2,'followuser':3})
490 µs ± 20.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [1585]: %timeit df['activityType'].apply(lambda x: 1 if x=='joinClub' else None)
114 µs ± 1.56 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
循环真的很慢。您应在此处使用:

与其他解决方案的性能比较: 我的解决方案:

In [1582]: %timeit np.select(conditions, choices)
45.5 µs ± 1.84 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
In [1584]: %timeit df['activityType'].map(mapping)
401 µs ± 5.09 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [1590]: %timeit df.activityType.replace({'joinClub':1,'post':2,'followuser':3})
490 µs ± 20.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [1585]: %timeit df['activityType'].apply(lambda x: 1 if x=='joinClub' else None)
114 µs ± 1.56 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
@Djib2011的解决方案:

In [1582]: %timeit np.select(conditions, choices)
45.5 µs ± 1.84 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
In [1584]: %timeit df['activityType'].map(mapping)
401 µs ± 5.09 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [1590]: %timeit df.activityType.replace({'joinClub':1,'post':2,'followuser':3})
490 µs ± 20.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [1585]: %timeit df['activityType'].apply(lambda x: 1 if x=='joinClub' else None)
114 µs ± 1.56 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
@JenilDave的解决方案:

In [1582]: %timeit np.select(conditions, choices)
45.5 µs ± 1.84 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
In [1584]: %timeit df['activityType'].map(mapping)
401 µs ± 5.09 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [1590]: %timeit df.activityType.replace({'joinClub':1,'post':2,'followuser':3})
490 µs ± 20.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [1585]: %timeit df['activityType'].apply(lambda x: 1 if x=='joinClub' else None)
114 µs ± 1.56 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
@yashjain的解决方案:

In [1582]: %timeit np.select(conditions, choices)
45.5 µs ± 1.84 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
In [1584]: %timeit df['activityType'].map(mapping)
401 µs ± 5.09 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [1590]: %timeit df.activityType.replace({'joinClub':1,'post':2,'followuser':3})
490 µs ± 20.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [1585]: %timeit df['activityType'].apply(lambda x: 1 if x=='joinClub' else None)
114 µs ± 1.56 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

Mayank提供了一个很好的答案,你仍然可以探索这个方法


Mayank提供了一个很好的答案,你仍然可以探索这个方法

th;dr我想你真正想要的是把activityType的值映射成整数。这最好由政府来做

映射={'joinClub':1,'post':2,'followuser':3} df['activity\u Preference']=df['activityType'].映射 错误的意思是,如果您有这样的序列ser:

           activityType activity_preferance
userID      
agashi1996  joinClub    1
agashi1998  post        2
agashi1998  post        2
agashi1998  post        2
agashi1994  followuser  3
>>> print(ser)

0  True
1  False
2  True
3  True
4  False
...
其真值可能不明确,即它是真的还是假的?。如果我要写,python应该做什么:

如果ser: 做点什么 没有明确的答案,因为ser的布尔值是不明确的,因此会产生错误。

th;dr我想你真正想要的是把activityType的值映射成整数。这最好由政府来做

映射={'joinClub':1,'post':2,'followuser':3} df['activity\u Preference']=df['activityType'].映射 错误的意思是,如果您有这样的序列ser:

           activityType activity_preferance
userID      
agashi1996  joinClub    1
agashi1998  post        2
agashi1998  post        2
agashi1998  post        2
agashi1994  followuser  3
>>> print(ser)

0  True
1  False
2  True
3  True
4  False
...
其真值可能不明确,即它是真的还是假的?。如果我要写,python应该做什么:

如果ser: 做点什么
没有明确的答案,因为ser的布尔值是不明确的,因此会产生错误。

为什么不使用

从“activityType”创建列“activity\u Preference”

>>>df['activity\u Preference']=df['activityType']。复制 然后,我们将用您的条件替换“活动\首选项”列的值

>>>df['activity\u preference']。替换{'joinClub':1,'post':2,'followuser':3},inplace=True
注意:小心使用inplace=True

为什么不使用

从“activityType”创建列“activity\u Preference”

>>>df['activity\u Preference']=df['activityType']。复制 然后,我们将用您的条件替换“活动\首选项”列的值

>>>df['activity\u preference']。替换{'joinClub':1,'post':2,'followuser':3},inplace=True
注意:注意inplace=True

请检查我的解决方案与我帖子中所有其他解决方案的性能计时。我的速度至少快了5-10倍。请检查我的解决方案与我帖子中所有其他解决方案的性能计时。我的速度至少是np的5-10倍。与np相比,map速度非常慢。选择。请检查我的时间比较解决方案。@MayankPorwal是的,你是对的,你的速度要快得多,但是如果你不太关心性能,我更喜欢map,因为它在概念上更简单、更干净……与np.select相比,map速度真的很慢。请检查我的时间比较解决方案。@MayankPorwal是的,你是对的,你的速度更快,但是如果你不太关心性能,我更喜欢map,因为它在概念上更简单、更清晰……我已经将性能时间比较与其他答案进行了比较。请查收。如果你觉得我的答案是好的,请别忘了投票。我已经把性能计时与其他答案进行了比较。请查收。如果你觉得我的答案是好的,请不要忘记投票。毫无疑问,你的解决方案很好,但它需要大量的硬编码而不是大量的打字。但是,我想我会比任何一天的写作都有更好的表现。是的,如果没有开发时间和内存限制的话,更好的表现总是赢的。毫无疑问,你的解决方案很棒,但它需要大量的硬编码而不是大量的打字。但是,我想我会比任何一天的写作都有更好的表现。是的,如果没有开发时间和内存限制,更好的表现总是胜出的