to_csv - save dataframe to csv without index python
CuestiĆ³n de salida pandas to_csv (4)
A diferencia de escribir ''foo.txt''
, escribe ''foo.csv''
. Eso solucionó el problema. Cuando el archivo CSV se lee en Excel, las comillas adicionales están ausentes.
Soy bastante nuevo en los pandas de Python, pero tengo problemas para obtener la salida correcta de to_csv.
import pandas as pd
text = ''this is "out text"''
df = pd.DataFrame(index=[''1''],columns=[''1'',''2''])
df.loc[''1'',''1'']=123
df.loc[''1'',''2'']=text
df.to_csv(''foo.txt'',index=False,header=False)
La salida es:
123, "esto es" "texto extra" ""
Pero me gustaría:
123, esto es "fuera de texto"
¿Alguien sabe cómo hacer esto bien?
Nota: actualmente hay un pequeño error en la documentación de Pandas to_string . Dice:
- quoting: int, controla si se deben reconocer las comillas. Los valores se toman de los valores csv.QUOTE_ *. Los valores aceptables son 0, 1, 2 y 3 para QUOTE_MINIMAL, QUOTE_ALL, QUOTE_NONE y QUOTE_NONNUMERIC,
respectivamente.
Pero esto invierte cómo csv define las variables QUOTE_NONE y QUOTE_NONNUMERIC.
In [13]: import csv
In [14]: csv.QUOTE_NONE
Out[14]: 3
Para usar quoting=csv.QUOTE_NONE
, debe configurar el escapechar
, por ejemplo
# Create a tab-separated file with quotes
$ echo abc$''/t''defg$''/t''$''"xyz"'' > in.tsv
$ cat in.tsv
abc defg "xyz"
# Gotcha the quotes disappears in `"..."`
$ python3
>>> import pandas as pd
>>> import csv
>>> df = pd.read("in.tsv", sep="/t")
>>> df = pd.read_csv("in.tsv", sep="/t")
>>> df
Empty DataFrame
Columns: [abc, defg, xyz]
Index: []
# When reading in pandas, to read the `"..."` quotes,
# you have to explicitly say there''s no `quotechar`
>>> df = pd.read_csv("in.tsv", sep="/t", quotechar=''/0'')
>>> df
Empty DataFrame
Columns: [abc, defg, "xyz"]
Index: []
# To print out without the quotes.
>> df.to_csv("out.tsv", , sep="/t", quoting=csv.QUOTE_NONE, quotechar="", escapechar="//")
Podría pasar quoting=csv.QUOTE_NONE
, por ejemplo:
>>> df.to_csv(''foo.txt'',index=False,header=False)
>>> !cat foo.txt
123,"this is ""out text"""
>>> import csv
>>> df.to_csv(''foo.txt'',index=False,header=False, quoting=csv.QUOTE_NONE)
>>> !cat foo.txt
123,this is "out text"
pero en mi experiencia es mejor citar más, en lugar de menos.