Cela fait partie de mon défi Interviews. Je ne parviens pas à trouver de ressources sur lesquelles je peux créer mon Dataframe en Python sans utiliser Pandas ou Numpy. Je suis curieux de savoir comment créer une Datframe à partir de CSV sans utiliser de bibliothèques et effectuer une analyse de données. Toutes les directions seraient utiles.
3 Réponses :
Vous aurez probablement besoin d' une bibliothèque pour lire un fichier CSV. Bien que vous puissiez potentiellement ouvrir et analyser les données vous-même, cela serait fastidieux et prendrait du temps. Heureusement, python est livré avec un module csv
standard que vous n'aurez pas à installer! Vous pouvez lire votre fichier comme ceci:
['product_id', 'product_name', 'aisle_id', 'department_id'] ['9327', 'Garlic Powder', '104', '13'] ['17461', 'Air Chilled Organic Boneless Skinless Chicken Breasts', '35', '12'] ['17668', 'Unsweetened Chocolate Almond Breeze Almond Milk', '91', '16'] ['28985', 'Michigan Organic Kale', '83', '4'] ['32665', 'Organic Ezekiel 49 Bread Cinnamon Raisin', '112', '3'] ['33120', 'Organic Egg Whites', '86', '16'] ['45918', 'Coconut Butter', '19', '13'] ['46667', 'Organic Ginger Root', '83', '4'] ['46842', 'Plain Pre-Sliced Bagels', '93', '3']
Cela vous montrera que chaque row
est lue sous forme de liste. Vous pouvez ensuite le traiter en fonction de l'index! Il existe également d'autres moyens de lire les données, comme décrit sur https://docs.python.org/3/library/csv.html, dont l'un créera un dictionnaire au lieu d'une liste!
Vous avez lié votre github pour le projet que j'ai pris le snip
product_id,product_name,aisle_id,department_id 9327,Garlic Powder,104,13 17461,Air Chilled Organic Boneless Skinless Chicken Breasts,35,12 17668,Unsweetened Chocolate Almond Breeze Almond Milk,91,16 28985,Michigan Organic Kale,83,4 32665,Organic Ezekiel 49 Bread Cinnamon Raisin,112,3 33120,Organic Egg Whites,86,16 45918,Coconut Butter,19,13 46667,Organic Ginger Root,83,4 46842,Plain Pre-Sliced Bagels,93,3
Je l'ai enregistré en tant que file.csv
et l' file.csv
exécuté avec le code ci-dessus que j'ai publié. Résultat:
import csv with open('file.csv', 'r') as file: my_reader = csv.reader(file, delimiter=',') for row in my_reader: print(row)
Cela fait ce que vous avez demandé dans votre question. Je ne vais pas faire votre projet pour vous, vous devriez pouvoir le travailler à partir d'ici.
Et si je suis censé n'utiliser que des bibliothèques d'entrée et de sortie. Puis-je utiliser une bibliothèque CSV d'importation?
@MosaliHarshaVardhanReddy Qu'entendez-vous par «Bibliothèques d'entrée et de sortie»? csv
est fourni avec une csv.reader()
et csv.writer()
. Cela en fait-il une "bibliothèque d'entrée et de sortie"?
Au lieu d'utiliser le lecteur CSV. Je devrai peut-être utiliser le file.reader ("file.csv") et le convertir en DataFrame
Je suis confus. Vous voulez un DataFrame, mais vous refusez d'utiliser numpy
. Je ne pense pas que vous puissiez l'avoir sur les deux tableaux ... Les DataFrames sont numpy
spécifiques pour autant que je sache.
@MosaliHarshaVardhanReddy Donc, vous dites qu'il est nécessaire pour vous d'analyser les données vous-même? Et vous n'êtes pas autorisé à utiliser même les modules de bibliothèque Python standard? Je suppose que pour créer un dataframe, le mieux que vous puissiez faire est de faire une liste de listes
Ouais, j'ai besoin de faire une liste de listes et de les mapper avec les valeurs correspondantes. Je suis capable de faire des progrès. Je publierai un lien GitHub après avoir fait mon analyse dans le commentaire. Merci pour l'aide.
@MosaliHarshaVardhanReddy Je vous exhorte vraiment à utiliser le module csv
sauf indication contraire (ce qui dans votre message vous dites que seuls numpy
et les pandas
sont exclus). Ensuite, vous pouvez soit créer une base de données SQL en utilisant sqlite3
soit créer une liste de listes ou une liste de dictionnaires pour représenter vos données à analyser. Je ne vois aucune raison pour laquelle vous ne devriez pas pouvoir importer quoi que ce soit. Si tel est le cas alors que vous êtes dans un projet difficile qui sera fastidieux et prend du temps et négligera la meilleure partie de python: ne pas avoir à réinventer la roue avec chaque programme
@MosaliHarshaVardhanReddy Beau travail. Bonne chance pour votre entretien alors!
Récemment, j'ai eu une question très similaire qui a été rendue plus compliquée que celle-ci sur la création d'une structure de données sans utiliser de pandas. C'est la seule question pertinente que j'ai trouvée jusqu'à présent. Si je prends cette question, alors ce qu'on m'a demandé était: mettre l'ID de produit comme clés d'un dictionnaire, puis mettre la liste des tuples d'ID d'allée et de département comme valeurs (en python). Le dictionnaire est le dataframe requis. Bien sûr je ne pouvais pas le faire en 15 min (plutôt en 2 heures). Il m'est difficile de penser en dehors des engourdis et des pandas.
J'ai les solutions suivantes, qui répondent également à cette question au début. Probablement pas idéal mais j'ai obtenu ce dont j'avais besoin.
Espérons que cela aide aussi.
mydict: {'9327': [('104', '13')], '17461': [('35', '12')], '17668': [('91', '16')], '28985': [('83', '4')], '32665': [('112', '3')], '33120': [('86', '16')], '45918': [('19', '13')], '46667': [('83', '4')], '46842': [('93', '3')]}
Avec la sortie,
import csv file = open('data.csv', 'r') reader = csv.reader(file) items = [] # put the rows in csv to a list aisle_dept_id = [] # to have a tuple of aisle and dept ids mydict = {} # porudtc id as keys and list of above tuple as values in a dictionary product_id, aisle_id, department_id, product_name = [], [], [], [] for row in reader: items.append(row) for i in range(1, len(items)): product_id.append(items[i][0]) aisle_id.append(items[i][1]) department_id.append(items[i][2]) product_name.append(items[i][3]) for item1, item2 in zip(aisle_id, department_id): aisle_dept_id.append((item1, item2)) for item1, item2 in zip(product_id, aisle_dept_id): mydict.update({item1: [item2]})
Avait une exigence similaire et est venu avec cette solution; une fonction qui convertit csv en json (json nécessaire pour la lisibilité et pour faciliter l'interrogation des données sans avoir accès à Pandas). Si l'argument d'en- headers
de la fonction est True
, la première ligne du csv est utilisée comme clés dans le json, sinon les indices de valeur sont utilisés comme clés.
[ {"0": 2020, "1": 11, "2": 11}, {"0": 2020, "1": 12, "2": 12} ]
Étant donné un csv contenant ce qui suit
[ {"year": 2020, "month": 11, "week": 11}, {"year": 2020, "month": 12, "week": 12} ]
La sortie avec les en-têtes est
+------+-------+------+ | Year | Month | Week | +------+-------+------+ | 2020 | 11 | 11 | | 2020 | 12 | 12 | +------+-------+------+
La sortie sans en-têtes est
from csv import reader as csv_reader def csv_to_json(csv_path: str, headers: bool) -> list: '''Convert data from a csv to json''' # store json data json_data = [] try: with open(csv_path, 'r') as file: reader = csv_reader(file) # set column names using first row if headers: columns = next(reader) # convert csv to json for row in reader: row_data = {} for i in range(len(row)): # set key names if headers: row_key = columns[i].lower() else: row_key = i # set key/value row_data[row_key] = row[i] # add data to json store json_data.append(row_data) # error handling except Exception as e: print(repr(e)) return json_data
Un dataframe peut être vu comme une collection d'enregistrements ou comme une liste de colonnes. Numpy (et pandas) sont principalement des optimisations C ou Cython pour accélérer le traitement de grandes trames de données, mais vous implémentez tout à la main . Publier un commentaire uniquement parce que la question actuelle est assez large.