我一直在运行自己的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 )] )
但是我不知道为什么然后无法解决它。
欢迎任何帮助。
答案 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 ) ] )