Home > Mobile >  IndexingError: Too many indexers while using iloc
IndexingError: Too many indexers while using iloc

Time:12-05

I have a dataframe from which I am trying to add attributes to my graph edges. dataframe having mean_travel_time which is going to be the attribute for my edge

Plus, I have a data list which consists of source nodes and destination nodes as a tuple, like this. [(1160, 2399), (47, 1005)]

Now, while using set_edge_attribute to add attributes, I need my data into a dictionary: {(1160, 2399):1434.67, (47, 1005):2286.10, }

I did something like this:

data_dict={}#Empty dictionary

for i in data:

    data_dict[i] = df1['mean_travel_time'].iloc[i]#adding values

But, I am getting error saying too many indexers Can anyone help me out with the error?

CodePudding user response:

Please provide your data in a format easy to copy:

df = pd.DataFrame({
    'index': [1, 9, 12, 18, 26],
    'sourceid': [1160, 70, 1190, 620, 1791],
    'dstid': [2399, 1005, 4, 103, 1944],
    'month': [1] * 5,
    'distance': [1434.67, 2286.10, 532.69, 593.20, 779.05]
})

If you are trying to iterate through a list of edges such as (1,2) you need to set an index for your DataFrame first:

df1.set_index(['sourceid', 'dstid'])

You could then access specific edges:

df.set_index(['sourceid', 'dstid']).loc[(1160, 2399)]

Or use a list of edges:

edges = zip(df['sourceid'], df['dstid'])
df.set_index(['sourceid', 'dstid']).loc[edges]

But you don't need to go any of this because, in fact, you can get your entire dict all in one go:

df.set_index(['sourceid', 'dstid'])['mean_travel_time'].to_dict()

CodePudding user response:

Thanks for your input. I was able to achieve the desired dictionary with the help of this code.

data_dict={}
for i in range(len(data)):
   data_dict[data[i]] = df1['mean_travel_time'].iloc[i]}
  • Related