在意外情况下出现ValueError

时间:2019-06-16 15:30:20

标签: python-3.x indexing

我一直在运行自己的python小函数,并遇到了此意外的ValueError:

无法设置没有定义索引和无法转换为系列的值的框架

在将一个特定值(0)放入函数的三个参数之一( n_col_num 参数)时出现错误。

然后,我在使用功能 n_col_num 的函数的一部分中放入注释块,并始终接收相同的ValueError。

然后我确定了引起警报的代码部分:

df[ col ] = pd.DataFrame( [ random.choice( rand_val_hat ) for _ in range( n_rows )] )

更多细节,这是我的功能代码:

def rand_df_wrk ( n_col_num , lst_par_col_str , n_rows ) :

    """
     n_col_num : number of numeric columns

     lst_par_col_str : tuple ( a , b ) where a is the number of values in a hat of values and b the number of characters 
                   of each values ( all values are built with the same number of characters )

     n_rows : number of rows in the dataframe
    """

    df = pd.DataFrame()

    if n_col_num > 0 : 
        for i in range( n_col_num ) :
            # name of new numeric column :
            col = 'col_num_' + str( i )
            # values for the new numeric column 
            df[ col ] = np.random.normal( 0 , 1 , n_rows ) 

    if len( lst_par_col_str ) > 0 :  
        for i , par in enumerate( lst_par_col_str ) :
            # name of new string column :
            col = 'col_str_' + str( i )
            # values for sampling with replacement :
            rand_val_hat = rand_str_lst( par[0] , par[1] )
            # values for the new string column :
            df[ col ] = pd.DataFrame( [ random.choice( rand_val_hat ) for _ in range( n_rows )] )

    return df

rand_df_wrk 使用以下功能:

 def rand_str_lst( N , n ) :

   """
    N : number of string values
    n : number of characters for each string values ( each string value is built with the same number of characters )
   """

   rand_str_lst = []
   for i in range( N ) :
       rand_str_lst.append( rand_str( n ) )
   return rand_str_lst

然后 rand_str_lst 函数使用最后一个:

def rand_str ( n ) :

   """
    n : number of random characters in the returned string
   """

   rand_string = ''.join( random.SystemRandom().choices( string.ascii_uppercase + string.digits , k = n ) )
   return rand_string

我认为前两个功能对我的情况没有任何意义。

例如以这种方式调用 rand_df_wrk 函数时:

rand_df_wrk( n_col_num = 2 , lst_par_col_str = [ ( 5 , 3 ) , ( 2 , 1 ) ] , n_rows = 10 )

我得到了预期的结果(一个由2个数字列,2个字符串列和10行构成的随机数据框)。

如果我这样称呼:

rand_df_wrk( n_col_num = 0 , lst_par_col_str = [ ( 5 , 3 ) , ( 2 , 1 ) ] , n_rows = 10 )

我得到前面提到的ErrorValue。

发生此事件是因为未执行以下块:

if n_col_num > 0 : 
        for i in range( n_col_num ) :
            # name of new numeric column :
            col = 'col_num_' + str( i )
            # values for the new numeric column 
            df[ col ] = np.random.normal( 0 , 1 , n_rows )

因此它发生在我的主要功能的下一个块中:

if len( lst_par_col_str ) > 0 :  
    for i , par in enumerate( lst_par_col_str ) :
        # name of new string column :
        col = 'col_str_' + str( i )
        # values for sampling with replacement :
        rand_val_hat = rand_str_lst( par[0] , par[1] )
        # values for the new string column :
        df[ col ] = pd.DataFrame( [ random.choice( rand_val_hat ) for _ in range( n_rows )] )

尤其是那里:

df[ col ] = pd.DataFrame( [ random.choice( rand_val_hat ) for _ in range( n_rows )] )

但是我不知道为什么然后无法解决它。

欢迎任何帮助。

1 个答案:

答案 0 :(得分:0)

这是我的解决方案:而不是

df[ col ] = pd.DataFrame( [ random.choice( rand_val_hat ) for _ in range( n_rows ) ] )

我尝试过:

df[ col ] = pd.Series( [ random.choice( rand_val_hat ) for _ in range( n_rows ) ] )

(参见https://github.com/pandas-dev/pandas/issues/5632