Skip to content Skip to sidebar Skip to footer

How To Read A Csv File And Sum Values Based On User Input?

Read a CSV file User have to enter the Mobile number Program should show the Data usage (i.e. Arithmetic Operation Adding Uplink & downlink) to get the result (Total Data Use

Solution 1:

With pandas

import pandas as pd

# read in data
df = pd.read_csv('test.csv', sep=';')

# if there are really spaces at the beginning of the column names, they should be removed
df.columns = [col.strip() for col in df.columns]

# sum Download & Upload for all occurrences of the given number
usage = df[['Download', 'Upload']][df.Mobile_number == 7777777].sum().sum()

print(usage)

>>> 431596
  • if you want Download and Upload separately
# only 1 sum()
usage = df[['Download', 'Upload']][df.Mobile_number == 7777777].sum()

print(usage)

Download    426910
Upload        4686

with user input

  • This assumes the Mobile_number column has be read into the dataframe as an int
  • input is a str so it must be converted to int to match the type in the dataframe
  • df.Mobile_number == 7777777 not df.Mobile_number == '7777777'
number = int(input('Please input a phone number (numbers only)'))

usage = df[['Download', 'Upload']][df.Mobile_number == number].sum().sum()

With no imported modules

# read file and create dict of phone numbers
phone_dict = dict()
withopen('test.csv') as f:
    for i, l inenumerate(f.readlines()):
        l = l.strip().split(';')
        if (i != 0):
            mobile = l[1]
            download = int(l[2])
            upload = int(l[3])
            if phone_dict.get(mobile) == None:
                phone_dict[mobile] = {'download': [download], 'upload': [upload]}
            else:
                phone_dict[mobile]['download'].append(download)
                phone_dict[mobile]['upload'].append(upload)


print(phone_dict)
{'+917777777777': {'download': [213455, 213455], 'upload': [2343, 2343]},
 '+919999999999': {'download': [345656], 'upload': [3568]},
 '+919123456654': {'download': [345789], 'upload': [7651]},
 '+919123456543': {'download': [342467], 'upload': [4157]}}

# function to return usagedefreturn_usage(data: dict, number: str):
    download_usage = sum(data[number]['download'])
    upload_usage = sum(data[number]['upload'])

    return download_usage + upload_usage

# get user input to return usage
number = input('Please input a phone number')

usage = return_usage(phone_dict, number)
print(usage)
>>> Please input a phone number (numbers only) +917777777777>>> 431596

Solution 2:

The csv is not too much readable, but you could take a look at his library https://pandas.pydata.org/

Once installed you could use:

# ask for the mobile number here
mobile_number = input('phone number? ')

df = pandas.read_csv('data.csv')

# here you will get the data for that user phone
user_data = df[df['Mobile_number'] == mobile_number].copy()

# not pretty sure in this step
user_data['download'].sum()

Post a Comment for "How To Read A Csv File And Sum Values Based On User Input?"