Skip to content
Advertisement

IndexError: single positional indexer is out-of-bounds

I have a dataframe that contains a few rows. I want to access one by one row and create another data frame with specific columns. After that running some other logics but it failed before that.

Dataframe df_input_data

src_table_name src_column_name src_business_key_name  
0  banking_fraud         Acct_id               Acct_id   
1      sale_mast       cust_code               bill_no

Access row using iterrows():

for index, df_input_single in df_input_data.iterrows():
print("input", df_input_single)

Output:

input src_table_name                                      banking_fraud
src_column_name                                           Acct_id
src_business_key_name                                     Acct_id

Creating another dataframe:

df_src_input = pd.DataFrame().assign(table_name=df_input_single['src_table_name'],
                                     column_name=df_input_single['src_column_name'],
                                     business_key_name=df_input_single['src_business_key_name'])

issue is df_src_input is empty.

df_src_input Empty DataFrame
Columns: [table_name, column_name, business_key_name, select_column_names, where_condition, end_date, load_dt_tm, src_tgt_validation_type, schema_name, schema_table]
Index: []

Is there any other way to assign value to different dataframe.

Advertisement

Answer

if you print out

print('type', type(df_input_single['src_column_name']))

for example, it will be type <class 'str'>, which is just a string value. To put data in a column, it must be a list or a tuple. Put each value in square brackets.

for index, df_input_single in df_input_data.iterrows():
    #print('input', df_input_single)
    #print('type', type(df_input_single['src_column_name']))
    df_src_input = pd.DataFrame().assign(table_name=[df_input_single['src_table_name']],
                                         column_name=[df_input_single['src_column_name']],
                                         business_key_name=[df_input_single['src_business_key_name']])

    print(df_src_input)
User contributions licensed under: CC BY-SA
4 People found this is helpful
Advertisement