2016-07-15 166 views
5

Ho letto il manuale di here e vide this risposta, ma non funziona:Come scrivere correttamente un file TSV da una serie in Pandas?

>>> import pandas as pd 
>>> import csv 
>>> pd.Series([my_list]).to_csv('output.tsv',sep='\t',index=False,header=False, quoting=csv.QUOTE_NONE) 
    Traceback (most recent call last): 
     File "<stdin>", line 1, in <module> 
    TypeError: to_csv() got an unexpected keyword argument 'quoting' 

senza l'argomento citando, funziona.

pd.Series([my_list]).to_csv('output.tsv',sep='\t',index=False,header=False) 

Ma questo è incompatibile con l'utilizzo previsto.

per rendere le cose ancora più confuse, quando ho scritto una tabella in questo modo, non c'erano citazioni, e nessun errore:

my_dataframe.to_csv('output2.tsv',sep='\t', quoting=csv.QUOTE_NONE) 

Qualsiasi idea di cosa sta succedendo?

+0

Secondo i [documenti] (http://pandas.pydata.org/pandas-docs/sta ble/generated/pandas.Series.to_csv.html) non esiste l'argomento 'quoting' su Series.to_csv, quindi non sorprende che tu stia ottenendo quell'errore. C'è una ragione per cui non puoi semplicemente usare un 'DataFrame'? –

+0

Stavo solo cercando di scrivere una singola colonna di dati e ho pensato di evitare passaggi di conversione non necessari. Sembra che la conversione in 'DataFrame' sia necessaria dopo tutto. Non è un grosso problema, lo farò invece. Grazie. – user5359531

risposta

4

Il internal pandas implementation of Series.to_csv() prima converte Series per dataframe e poi chiama DataFrame.to_csv() metodo:

def to_csv(self, path, index=True, sep=",", na_rep='', float_format=None, 
      header=False, index_label=None, mode='w', nanRep=None, 
      encoding=None, date_format=None, decimal='.'): 
    """ 
    Write Series to a comma-separated values (csv) file 
    ... 
    """ 
    from pandas.core.frame import DataFrame 
    df = DataFrame(self) 
    # result is only a string if no path provided, otherwise None 
    result = df.to_csv(path, index=index, sep=sep, na_rep=na_rep, 
         float_format=float_format, header=header, 
         index_label=index_label, mode=mode, nanRep=nanRep, 
         encoding=encoding, date_format=date_format, 
         decimal=decimal) 
    if path is None: 
     return result 

modo da poter convertire da soli e poi si avrà una gamma più ampia di parametri:

pd.DataFrame(your_series_obj).to_csv(..., quoting=csv.QUOTE_NONE) 

o:

your_series_obj.to_frame().to_csv(..., quoting=csv.QUOTE_NONE)