J'ai une donnée floue, qui est aussi ci-dessous. Veuillez noter que le premier élément a des noms répétés (qui est un peu important à considérer). Si les données ci-dessus étaient dans un fichier appelé "OutTLET.txt", comment l'importerait-elle et résumer les données comme indiqué ci-dessous? p> [Seuls les noms uniques restent, et pour chaque nom principal, seules des chaînes uniques seront remplacées à partir de tous les doublons existants] p>
4 Réponses :
Vous pouvez charger les données dans un pandas puis créer un et enfin dataframe code>: fonction code> pour concaténer des listes sur une colonne Pandas: p> appliquer code> la fonction à la colonne: p>
Cher @franco Piccolo, merci pour votre gentil réponse, et j'ai un petit doute ici. Que se passe-t-il si les données sont dans un fichier comme "Output.txt" dois-je modifier l'extension en "CSV" et importer le DataFrame s'il vous plaît?
Oui, vous pouvez charger les données d'un CSV. Je ne pense pas que ce sera aussi simple cependant, car la liste sera lu sous forme de texte. Peut-être devriez-vous poser une autre question pour la partie importation.
import ast
import csv
import pandas as pd
#load data from txt file, doesnt has to be csv, can be a txt file!
df = pd.read_csv(r"D:\test\output.txt", sep="/n", header=None, names=["data"], engine='python')
#convert text data to tupels and list
df["data"] = df["data"].map(lambda x: ast.literal_eval(x))
#extract surename
df["surename"] = df["data"].map(lambda x: x[0])
#extract list of strings
df["strings"] = df["data"].map(lambda x: x[1])
#create 1 row for each string in the list of strings
df = df.explode("strings")
#remove duplicate entries
df = df.drop_duplicates(subset=["surename", "strings"], keep="first")
#group the data by surename to get a list of unique strings (unique because we removed duplicates, order will be kept)
df_result = df.groupby(["surename"]).aggregate({"strings":list}).reset_index()
#combine both th extractd surename and the modified list of strings again
df_result["result"] = df_result.apply(lambda x: (x["surename"], x["strings"]), axis=1)
#output the data to a file of your choice
df_result[["result"]].to_csv(r"D:\test\result.txt",index=False, header=None, quoting=csv.QUOTE_NONE, escapechar = '')
Je suis d'accord que Pandas est une bibliothèque em> em>, mais ce genre de choses peut être faite très facilement avec des packages intégrés à python ordinaires 1 sup>. Vous pouvez simplement utiliser python DefaultDict avec des ensembles et utilisez REGEX finditer pour l'analyse syntaxique. 1 sup> a un sens surtout car votre entrée ni votre sortie ne figure dans aucun des types de données Pandas em> (PD.Series, pd.dataframe, ..) ou même un format standard .csv / tabulaire .. sup> p> code h3>
exemple de sortie h3>
expliquant comment le code fonctionne h3>
\ S code>) entre deux apostrophes ( code>). Par conséquent, le motif est regex '(\ S +?) Code>. Le plus + code> qui correspond à un ou plusieurs caractères et ? Code> fait la recherche non gourmande (correspondre aussi peu de caractères possible), donc nous obtenons toutes les chaînes distinctes analysées, pas seulement une chaîne avec tout le contenu de la ligne. li>
re.finditer code> A> est utilisé pour correspondre à plusieurs groupes avec le même motif. Dans ce cas, il est utilisé au lieu de re.findall code> depuis re.findall code> crée un em> et re.finditer code > crée un itérateur em>. (Petite optimisation: Ne créez pas la liste car elle n'est pas nécessaire du tout) LI>
code> sur suivant () code> ITR code>. Il renvoie le premier élément de l'itérateur. Li>
Groupes () < / Code> et prenez le premier élément de la valeur renvoyée. Voici comment les groupes capturés avec parenthèses ( () code>) dans le modèle sont accessibles. Li>
ITR code> Nous n'avons que des cordes à partir desquelles nous voulons créer Python Ensemble , quel quarantage éléments uniques. La syntaxe indiquée est la compréhension définie em>. Li>
defaultdict (set) code> pour avoir ensemble code> comme type par défaut. L'opération d [key] | = val code> est la même chose que d [key] = d [key] | val code> et le | code> crée un ensemble qui est le Union em> du nouvel ensemble et de l'ensemble, nous pourrions déjà avoir dans le jeu de données code>. li>
results.txt code>. Coulée chaînes code> à la liste est facultative, mais il est fait pour rendre la sortie similaire à ce qui était dans la question. Li>
ul> p>
WoWW
data = []
a_dict = {}
unique = []
#considering that the file name is a.txt here.
#After opening the file i used the eval function to turn the string into code
#now the list data will have all the file's data, all elements inside list data are tuples
with open('a.txt','r') as file:
for i in file.readlines():
a = eval(i)
data.append(a)
#here i wrote this code for collecting all unique name in a list
for i in data:
if i[0] not in unique:
unique.append(i[0])
#after collecting unique names inside list unique, i performed iteration over all values inside list unique.
#
#then i performed iteration on the list which is holding all the data
#
#compared all the unique values with the list data and
#then if they are matching then adding those values inside a list a_list
#
#when it is finished with the iteration inside list data, it will add that list into a dict a_dict with its unique value
#
#a_list will be assigned a new list for the next unique value
for i in unique:
a_list = []
for j in data:
if i==j[0]:
a_list.extend(j[1])
a_dict[i] = list(tuple(a_list))
#This piece of code is to print out the data in a formatted way.
for i,j in a_dict.items():
print("('{}', {})".format(i,j))