Bonjour.
Récemment, je touche aussi ** Python **.
Désormais, afin d'améliorer l'efficacité des opérations internes, nous essayons d'automatiser le processus d'application de paiement que la comptabilité effectue manuellement à l'aide d'Excel et de Csv en utilisant ** Python **.
J'utilise ** openpyxl ** pour les opérations Excel et ** pandas ** pour le traitement des données, mais je suis toujours aux prises avec des ** pandas **, et si c'est ** C # **, le code sera tué instantanément. J'ai également du mal avec le processus d'assemblage.
J'écrirai une telle lutte au lieu d'un mémo.
Cliquez ici pour lire ce mémo.
Il y a peut-être un tsukkomi qui dit: "C'est aussi simple que ça!", Mais j'ai essayé diverses choses, alors je vais en prendre note.
Quand j'ai cherché comment supprimer une ligne dans un DataFrame, j'ai trouvé une fonction appelée ** drop **. [Officiel] pandas.DataFrame.drop
L'utilisation est la suivante. Spécifiez le numéro d'index du DataFrame et supprimez-le.
import pandas as pd
#Lire le fichier Excel
data_frame = pd.read_excel('{Chemin du fichier Excel}', sheet_name='{Nom de la feuille}', header=0)
#10e ligne(Index=9)Supprimer
data_frame.drop(9)
#6ème ligne(Index=5)Et la ligne 8(Index=7)Supprimer
data_frame.drop([5,7])
#2e ligne(Index=1)5ème ligne à partir de(Index=4)Supprimer
data_frame.drop(range(1,4))
Cette fois, comme son titre l'indique, "** Supprimez les données dont le partenaire commence par XX et la description commence par △△ **" et supprimez les lignes qui remplissent plusieurs conditions.
Pour cela, il est nécessaire d'obtenir le numéro d'index qui satisfait aux conditions.
Quand j'ai cherché comment obtenir le numéro d'index d'un DataFrame, j'ai trouvé une fonction appelée ** index **. [Officiel] pandas.DataFrame.index
L'utilisation est la suivante.
#Obtenir un index qui correspond à la condition
drop_index = data_frame.index[data_frame['Fournisseurs'] == '〇〇']
#Supprimer l'index qui correspond à la condition
data_frame = data_frame.drop(drop_index)
Ouais, j'ai pu supprimer correctement les données de "** Les clients sont 〇〇 **". Ensuite, augmentons les conditions.
#Obtenir un index qui correspond à plusieurs conditions
drop_index = data_frame.index[(data_frame['Fournisseurs'] == '〇〇') & (data_frame['La description'] == '△△*****')]
#Supprimer l'index qui correspond à la condition
data_frame = data_frame.drop(drop_index)
Très bien, les données des deux conditions peuvent être supprimées! : Hmm? J'ai oublié quelque chose ... La deuxième condition était une correspondance de préfixe ... Je ne sais pas ...
Pour le moment, essayez la correspondance du préfixe ** commence par **.
#Essayez la correspondance de préfixe avec commence par DataFrame ...
drop_index = data_frame.index[(data_frame['Fournisseurs'] == '〇〇') & (data_frame['La description'].startswith('△△'))]
【résultat】
Error:'Series' object has no attribute 'startswith'
«** La série ** n'a pas ** commence par **!» Était en colère.
Pandas a un accesseur (méthode d'accès) qui peut traiter des chaînes appelées ** str **, et a également une fonction ** startswith ** qui peut être extraite par correspondance de préfixe. [Officiel] pandas.Series.str.startswith
Essayez-le avec ** str.startswith **.
#Ajout d'une condition de correspondance de préfixe avec startwith de l'accesseur str de DataFrame
drop_index = data_frame.index[(data_frame['Fournisseurs'] == '〇〇') & (data_frame['La description'].str.startswith('△△'))]
#Supprimer l'index qui correspond à la condition
data_frame = data_frame.drop(drop_index)
bien joué! J'ai pu supprimer correctement les données de deux conditions!
Je voudrais dire: "C'est ça!" Au moment où nous sommes arrivés à la méthode ci-dessus, nous l'avons implémentée d'une manière différente.
#Boucle jusqu'au nombre maximum de lignes dans le DataFrame
for i in range(len(data_frame)):
#Mandrin avec des valeurs de colonne et de ligne spécifiées
if data_frame['Fournisseurs'][i] == '〇〇' and data_frame['La description'][i].startswith('△△'):
#Supprimer le numéro d'index qui correspond à la condition
data_frame = data_frame.drop(i)
C'est un peu analogique, mais cela parcourt le nombre de lignes de données et traite chacune d'elles. Cette méthode peut également supprimer correctement les données de deux conditions.
Il existe de nombreuses autres méthodes, mais cette fois j'ai présenté la méthode que j'ai réellement essayée. C'est tout.
La prochaine fois, je publierai où j'ai eu du mal avec ** openpyxl ** et ** pandas **.
Merci d'avoir lu jusqu'ici.
Recommended Posts