-1
votes

Première ligne supprimée en Python avec Pandas

J'ai un csv avec les valeurs suivantes. Dans le fichier csv, il n'y a pas d'en-tête. J'ai le code comme:

    import pysftp
import os
import pandas as pd


# Accept any host key (still wrong see below)
cnopts = pysftp.CnOpts()
cnopts.hostkeys=None
# And authenticate with private key
sftp = pysftp.Connection(
  host="test.sftp.net", username="test", password="test123", cnopts=cnopts) #private_key=".ppk", 

# Temporary change directory
sftp.cwd('/delivery_files/')

# Get latest file
latest = 0
latestfile = None

for fileattr in sftp.listdir_attr():
    if fileattr.filename.startswith('Report_') and fileattr.st_mtime > latest:
        latest = fileattr.st_mtime
        latestfile = fileattr.filename

if latestfile is not None:
    sftp.get(latestfile, latestfile)

df = pd.read_csv(latestfile, header=None)
df.rename(columns={0: '1', 1: '2', 2: '3', 3: '4', 4: 'MID', 5: 'DID', 6: '7', inplace = True)

my_filtered_csv = pd.read_csv (latestfile, usecols=[4,5])
 

my_filtered_csv.to_csv('E:\Test\my_filtered_csv.csv', header=["MID", "DID"], index=False)




# Closes the connection
sftp.close()

# Prints out the directories and files, line by line

#print latestfile
print my_filtered_csv

Puisque le script recherche le dernier fichier dans un dossier spécifique, j'appelle latestfile. Voici ce qui s'affiche lorsque j'effectue une fonction d'impression. Lorsque j'appelle la fonction pour sortir le fichier dans un autre csv et ajouter des en-têtes, la ligne la plus haute est supprimée. Y a-t-il quelque chose de supplémentaire que je dois ajouter pour avoir la ligne la plus élevée en sortie? Voici le code de sortie:

       7619623       Y8G029224 
0      7619627       Y1G029224  
1      7619629           35200  
my_filtered_csv.to_csv('E:\Test\my_filtered_csv.csv', header=["MID", "DID"], index=False)

Voici le code:

df = pd.read_csv(latestfile, header=None)


1 commentaires

7619623 Y8G029224 0 7619627 Y1G029224 1 7619629 35200


3 Réponses :


0
votes

Votre code devrait fonctionner.

pd.read_csv('E:\Test\my_filtered_csv.csv', header=None) -vous potentiellement le fichier csv que vous venez d'enregistrer avec la commande pd.read_csv('E:\Test\my_filtered_csv.csv', header=None) ?

Si tel est le cas, lorsque vous réutilisez header=None , le nouvel en-tête ne s'affiche pas lorsque vous rouvrez le DataFrame.


0 commentaires

0
votes

Vos données montrent que la première ligne - 7619623 Y8G029224 - n'est pas des données puisque la deuxième ligne a l'index 0, la troisième ligne a l'index 1. Ainsi, la sortie n'ignore aucune donnée. Le seul problème est donc de savoir quelle est la première ligne de l'impression. Nous pouvons essayer de le comprendre pour vous si vous collez du code.


1 commentaires

La première ligne concerne les données. Ce sont les mêmes informations de rapport qui sont indiquées par 0 et 1.



0
votes

J'ai ajouté header = None dans cette ligne, et cela semble fonctionner maintenant.

my_filtered_csv = pd.read_csv (dernier fichier, en-tête = Aucun, usecols = [4,5])


0 commentaires