String row-index in pd.read_csv causes error "The label [1] is not in the [index]"

28,029

You have to cast columns with str in your for.

In[60]: data = pd.read_csv(r'/Users/Desktop/data.csv', sep = ',', index_col = [0])

In[61]: obs = len(data)

In[62]: data["A"] = 0
        data["B"] = 0
        data["U"] = 0

In[63]: Passengers = 500

In[64]: for row in range(1,obs+1):
            print row
            A = 0
            B = 0
            U = 0
            for i in range(1, Passengers + 1, 1):
                if data.loc[row, str(i)] == "A":
                    A += 1
                elif data.loc[row, str(i)] == "B":
                    B += 1
                else:
                    U += 1
            data.loc[row, "A"] = A
            data.loc[row, "B"] = B
            data.loc[row, "U"] = U
1
.
.
10

A shortest way to do that :

data = pd.read_csv(r'/Users/Desktop/data.csv', sep = ',', index_col = [0])

cols = data.columns
data['A'] = (data[cols] == 'A').astype(int).sum(axis=1)
data['B'] = (data[cols] == 'B').astype(int).sum(axis=1)
data['U'] = (data[cols] == 'U').astype(int).sum(axis=1)
Share:
28,029
Rupert
Author by

Rupert

Updated on February 22, 2020

Comments

  • Rupert
    Rupert about 4 years

    I am importing a CSV into a pandas dataframe. When I am do this, I am setting the index column to 0, which is the Index listed (0 to 10). I am getting the error Key Error: the label [1] is not in the [index].

    I've checked the data multiple times to make sure that the first column is the list of numbers. Any hints on how I can fix this?

    from __future__ import division
    import pandas as pd
    import random
    import math
    
    
    #USER VARIABLES
    
    #GAME VARIABLES
    
    Passengers = 500
    
    data = pd.read_csv("Problem2/data.csv", index_col=0)
    print(data)
    
    obs = len(data)
    
    data["A"] = 0
    data["B"] = 0
    data["U"] = 0
    
    
    for row in range(1,obs+1, 1):
    
        A = 0
        B = 0
        U = 0
    
        for i in range(1, Passengers + 1, 1):
    
            if data.loc[row, i] == "A":
                A += 1
            elif data.loc[row, i] == "B":
                B += 1
            else:
                U += 1
    
    
        data.loc[row, "A"] = A
        data.loc[row, "B"] = B
        data.loc[row, "U"] = U
    
    ServiceLevels = range(170, 210,1)
    for level in ServiceLevels:
        print(str(level) + " " + str(len(data[((data.A <= level))])/obs))
    

    Dataset = https://github.com/deacons2016/SimulationModels/blob/master/Exam1/Problem2/data.csv