2016-07-15 2 views
5

Ich habe das Handbuch here gelesen und sah this Antwort, aber es funktioniert nicht:Wie schreibe ich eine TSV-Datei aus einer Serie in Pandas korrekt?

>>> 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' 

Ohne die zitierte Argument, es funktioniert.

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

Aber das ist nicht mit meiner beabsichtigten Verwendung kompatibel.

Um die Sache noch verwirrender zu machen, wenn ich eine Tabelle auf diese Weise schrieb, gab es keine Anführungszeichen und keine Fehler:

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

Jede Idee, was los ist?

+0

Laut der [docs] (http://pandas.pydata.org/pandas-docs/sta ble/generated/pandas.Series.to_csv.html) es gibt kein "zitierendes" Argument für Series.to_csv, also ist es nicht verwunderlich, dass Sie diesen Fehler bekommen. Gibt es einen Grund, warum Sie nicht einfach einen 'DataFrame' verwenden können? –

+0

Ich habe gerade versucht, eine einzige Spalte mit Daten zu schreiben und dachte, ich könnte unnötige Konvertierungsschritte vermeiden. Sieht so aus, als ob die Konvertierung zu 'DataFrame' notwendig ist. Keine große Sache, ich werde das stattdessen tun. Vielen Dank. – user5359531

Antwort

4

Die internal pandas implementation of Series.to_csv() erste wandelt Serie Datenrahmen und ruft dann DataFrame.to_csv() Methode:

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 

Sie können es selbst So konvertieren und dann werden Sie einen reicheren Satz von Parametern haben:

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

oder:

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