Załóżmy, że czytam stronę internetową HTML i otrzymuję listę nazw takich jak: "Amiel, Henri-Frédéric".Jak odczytać ramkę danych zakodowanych ciągów z CSV w pythonie
Aby uzyskać listę nazw I zdekodować html za pomocą następującego kodu:
f = urllib.urlopen("http://xxx.htm")
html = f.read()
html=html.decode('utf8')
t.feed(html)
t.close()
lista=t.data
W tym momencie lista zmienna zawiera listę nazw, takich jak:
[u'Abatantuono Diego ' ... u'Amiel Henri-Frédéric']
teraz chciałbym:
- umieść te nazwy wewnątrz ramki DataFrame;
- zapisać DataFrame w pliku csv;
- odczytać CSV w Pythonie przez DataFrame
Dla uproszczenia, niech bierze pod uwagę tylko powyższą nazwę, aby zakończyć kroki od 1 do 3. Chciałbym użyć następującego kodu:
name=u'Amiel, Henri-Fr\xe9d\xe9ric'
name=name.encode('utf8')
array=[name]
df=pd.DataFrame({'Names':array})
df.to_csv('names')
uni=pd.read_csv('names')
uni #trying to read the csv file in a DataFrame
Na ten punkt pojawia się następujący błąd:
UnicodeDecodeError: 'utf8' codec can't decode byte 0xe9 in position 67: invalid continuation byte
Gdybym zastąpić ostatni wiersz powyższego kodu z:
print uni
Czytam DataFrame, ale nie sądzę, że jest to właściwy sposób na rozwiązanie tego problemu.
Mam wiele pytań wysłanych przez innych użytkowników na temat tego argumentu, ale nie udało mi się rozwiązać tego problemu.
Niestety, swoje prace kod, ale tylko wtedy, gdy używasz 'uni print' jako ostatni wiersz kodu. Jeśli spróbujesz użyć tylko "uni", pojawi się błąd: "UnicodeDecodeError: kodek" utf8 "nie może dekodować bajtu 0xe9 na pozycji 67: nieprawidłowy bajt kontynuacji" –
@ fabrizio_ff - jaka jest wersja 'pandas' /' numpy' używasz? – root
@ root-- numpy: 1.6.2 // pandy: 0.9.1. Próbowałem użyć twojego ostatniego kodu, ale jeśli napiszę tylko "uni", otrzymam ten sam błąd (zamiast tego działa z 'print uni'). –