简体   繁体   中英

My code doesn't produce any output -- Python

I have two columns of data ( sample data ) and I want to calculate total users for each week day.

For instance, I'd want my output like this (dict/list anything will do):

Monday: 25, Tuesday: 30, Wednesday:45, Thursday: 50, Friday:24, Saturday:22, Sunday:21

Here's my attempt:

def rider_ship (filename):
    with open('./data/Washington-2016-Summary.csv','r') as f_in:

        Sdict = []
        Cdict = []
        reader = csv.DictReader(f_in)
        for row in reader:
            if row['user_type']=="Subscriber": 
                if row['day_of_week'] in Sdict:
                    Sdict[row['day_of_week']]+=1
                else: 
                    Sdict [row['day_of_week']] = row['day_of_week']
            else:
                if row ['day_of_week'] in Cdict:
                    Cdict[row['day_of_week']] +=1
                else: 
                     Cdict[row['day_of_week']] = row['day_of_week']

        return Sdict, Cdict

        print (Sdict)
        print (Cdict)

t= rider_ship ('./data/Washington-2016-Summary.csv')
print (t)

TypeError::list indices must be integers or slices, not str

How about using pandas?

Let's first create a file-like object with io library:

import io
s = u"""day_of_week,user_type
Monday,subscriber
Tuesday,customer
Tuesday,subscriber
Tuesday,subscriber"""
file = io.StringIO(s)

Now to the actual code:

import pandas as pd
df = pd.read_csv(file) # "path/to/file.csv"

Sdict = df[df["user_type"] == "subscriber"]["day_of_week"].value_counts().to_dict()
Cdict = df[df["user_type"] == "customer"]["day_of_week"].value_counts().to_dict()

Now we have:

Sdict = {'Tuesday': 2, 'Monday': 1}

Cdict = {'Tuesday': 1}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM