Я запустил собственную функцию Python litte и получил неожиданную ошибку 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 )
Я получаю значение ошибки, указанное выше.
Это произошло потому, что не был выполнен следующий блок:
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 )] )
но я не могу понять, почему, а потом не могу это исправить.
Любая помощь приветствуется.