Pandas df.to_csv(“Datei.csv" encode="utf-8") gibt noch trash Zeichen zum minus-Zeichen
Habe ich etwas gelesen über ein Python-2 Einschränkung mit Bezug auf Pandas' to_csv( ... etc ...). Habe ich es getroffen? Ich bin auf Python 2.7.3
Erweist sich das Papierkorb-Zeichen ≥ und - wenn-Sie erscheinen in strings. Abgesehen davon, dass der export ist perfekt.
df.to_csv("file.csv", encoding="utf-8")
Gibt es Abhilfe?
df.head() ist diese:
demography Adults ≥49 yrs Adults 18−49 yrs at high risk|| \
state
Alabama 32.7 38.6
Alaska 31.2 33.2
Arizona 22.9 38.8
Arkansas 31.2 34.0
California 29.8 38.8
csv-Ausgabe ist diese
state, Adults ≥49 yrs, Adults 18−49 yrs at high risk||
0, Alabama, 32.7, 38.6
1, Alaska, 31.2, 33.2
2, Arizona, 22.9, 38.8
3, Arkansas,31.2, 34
4, California,29.8, 38.8
der ganze code ist:
import pandas
import xlrd
import csv
import json
df = pandas.DataFrame()
dy = pandas.DataFrame()
# first merge all this xls together
workbook = xlrd.open_workbook('csv_merger/vaccoverage.xls')
worksheets = workbook.sheet_names()
for i in range(3,len(worksheets)):
dy = pandas.io.excel.read_excel(workbook, i, engine='xlrd', index=None)
i = i+1
df = df.append(dy)
df.index.name = "index"
df.columns = ['demography', 'area','state', 'month', 'rate', 'moe']
#Then just grab month = 'May'
may_mask = df['month'] == "May"
may_df = (df[may_mask])
#then delete some columns we dont need
may_df = may_df.drop('area', 1)
may_df = may_df.drop('month', 1)
may_df = may_df.drop('moe', 1)
print may_df.dtypes #uh oh, it sees 'rate' as type 'object', not 'float'. Better change that.
may_df = may_df.convert_objects('rate', convert_numeric=True)
print may_df.dtypes #that's better
res = may_df.pivot_table('rate', 'state', 'demography')
print res.head()
#and this is going to spit out an array of Objects, each Object a state containing its demographics
res.reset_index().to_json("thejson.json", orient='records')
#and a .csv for good measure
res.reset_index().to_csv("thecsv.csv", orient='records', encoding="utf-8")
- Geben Sie uns ein Beispiel für deine Daten, da kann ich nicht reproduzieren "trash" - Zeichen.
- Nicht einmal auf Ihre Daten. Ein einfaches, vollständiges Beispiel, das das problem reproduziert wird, was wir wollen:
df = pd.DataFrame({"A": ['a', '≥']}); df.to_csv('test.csv')
, funktioniert gut für mich. Posten Sie Ihre python-version als auch. - Huh, ich versuche @TomAugspurger 's einfach testen, aber ich bekomme "SyntaxError: Non-ASCII character '\xe2' in der Datei test.py in Zeile 5, aber no encoding declared; see python.org/peps/pep-0263.html für weitere details" Unnötig zu sagen, ich verstehe nicht die Seite, die Sie zeigen Sie mir. Ich meine, ich verstehe, muss ich mein edit python installieren ... aber ich bin auf einer Frist anderswo jetzt, wissen Sie?
- Entweder Ihr python oder Ihre terminal-encoding eingestellt ist zu erwarten, dass nur ascii-Zeichen. Lesen Sie here nach einem Weg, um Ihre Codierung, die arbeiten können als temporäre Lösung.
- Ja, ich denke, das wird zu tun haben. Ich bin erschrocken update auf Python 3 in der Mitte eines Projekts sowieso.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre "schlechte" Ausgabe ist UTF-8 angezeigt, wie CP1252.
Unter Windows viele Redakteure übernehmen die Standard-ANSI-Codierung (CP1252 auf US Windows) anstelle von UTF-8, wenn es keine byte order mark (BOM) Zeichen am Anfang der Datei. Während eine Stückliste ist sinnlos, die UTF-8-Codierung die UTF-8-codiert-Präsenz dient als Signatur für einige Programme. Zum Beispiel, Microsoft Office Excel erfordert es, auch auf nicht-Windows-Betriebssysteme. Versuchen:
Dass der encoder fügt die Stückliste.
encoding='utf-8-sig'
für mich gearbeitet. auchencoding='utf-16'
sollte funktionierendf.to_excel('file.csv')
generiert eine excel-Datei, die hat kein Problem mit Excel. Scheint dieses Problem ist nur im Hinblick auf CSV-Dateien...df.to_excel('file.xls')
? Ich bekomme eine Fehlermeldung mitdf.to_excel('file.csv')
. XLS-und XLSX-Dateien werden in ein Excel-format schon so in Excel sollte auf jeden Fall kein problem Sie zu öffnen.