2017-10-16 4 views
1

La requête ci-dessous saisit des données et crée un fichier CSV, le problème que j'ai est que la source appelée 'SPLE' stocke des données dans la base de données avec des nombres de 0, 1 , 50.Comment modifier les données numériques en texte dans le fichier CSV

Cependant, dans les CSV ces chiffres sont collectés dans le CSV et je voudrais en quelque sorte lors de la création du CSV ceux nombre pour représenter des mots tels que,

0 = True

1 = False

50 = En attente

Quelqu'un pourrait me montrer comment cela se fait s'il vous plaît, j'ai eu du mal à ce sujet? Mon code:

de datetime import datetime d'importation ElasticSearch ElasticSearch import csv

es = Elasticsearch(["9200"]) 


res = es.search(index="search", body= 
       { 
        "_source": ["VT","NCR","N","DT","RD"], 
        "query": { 

         "bool": { 
          "must": [{"range": {"VT": { 
              "gte": "now/d", 
              "lte": "now+1d/d"}}}, 

           {"wildcard": {"user": "mike*"}}]}}},size=10) 


csv_file = 'File_' + str(datetime.now().strftime('%Y_%m_%d - %H.%M.%S')) + '.csv' 


header_names = { 'VT': 'Date', 'NCR': ‘ExTime', 'N': 'Name', 'DT': 'Party', ' RD ': 'Period'} 



with open(csv_file, 'w', newline='') as f: 
    header_present = False 
    for doc in res['hits']['hits']: 
     my_dict = doc['_source'] 
     if not header_present: 
      w = csv.DictWriter(f, my_dict.keys()) 
      w.writerow(header_names,) 
      header_present = True 
w.writerow(my_dict) 




     w.writerow(my_dict) 

La sortie dans le fichier CSV est:

Date  RD  Venue 
20171016 1  Central 
20171016 1  Central 
20171016 0  Central 
20171016 0  Central 
20171016 50  Central 
20171016 0  Central 
20171016 1  Central 
+0

Copie possible de [Modifier les données numériques en texte dans fichier CSV] (https://stackoverflow.com/questions/46784832/change-numerical-data-to-text-in-csv-file) –

Répondre

1

On dirait que vous en faire une un peu compliqué, pandas est ton ami.

import pandas as pd 

def SPLE_fix(sple): 
    if sple == 0: 
     return('True') 
    elif sple == 1: 
     return('False') 
    else: 
     return('Pending') 


df=pd.read_csv('mycsvfile.csv') 

df['SPLE'] = df['SPLE'].apply(SPLE_fix) 

df.to_csv('newcsv.csv', index=False) 

Sortie de newcsv.csv:

Date,SPLE,Venue 
20171016,False,Central 
20171016,False,Central 
20171016,True,Central 
20171016,True,Central 
20171016,Pending,Central 
20171016,True,Central 
20171016,False,Central 

EDIT:

Pour la solution de pandas géants libres:

import csv 

def SPLE_fix(sple): 
    #just check for text in header 
    try: 
     sple[1]=int(sple[1]) 
    except: 
     return(sple) 

    #this part just changes the value 
    if sple[1] == 0: 
     sple[1] = 'True' 
    elif sple[1] == 1: 
     sple[1] = 'False' 
    else: 
     sple[1] = 'Pending' 

    return(sple) 


with open('mycsvfile.csv', 'r') as csvfile: 
    data=csv.reader(csvfile, delimiter=',') 
    new_data=[SPLE_fix(row) for row in data] 

with open('newcsv.csv', 'w', newline='') as csvfile: 
    cwrite=csv.writer(csvfile, delimiter=',') 
    cwrite.writerows(new_data) 

Cela devrait obtenir le même résultat. Peut-être pas le plus efficace, mais à moins que vous le faites un grand nombre de fois, cela ne devrait pas trop importer.

+0

et si je peux pas installer des pandas sur mon ordinateur parce que je suis sur un proxy? – Rich

+0

J'ai ajouté une méthode pour obtenir la même sortie csv sans pandas. – SuperStew

+0

Malheureusement, cela ne fonctionne pas, j'ai une fonction qui crée le fichier CSV et lui donne un nom de fichier de données et de temps. alors peut-être que cela cause le problème? permettez-moi de mettre à jour mon message afin que vous puissiez voir cette partie du code – Rich