Dostosowywanie importu w pandas
Biblioteka pandas świetnie radzi sobie z wieloma problemami, które napotkasz podczas importowania danych – takimi jak komentarze w plikach płaskich, puste wiersze czy brakujące wartości (NA lub NaN). Na zakończenie tego rozdziału zaimportujesz uszkodzoną kopię zbioru danych Titanic – plik titanic_corrupt.txt, który zawiera komentarze po znaku '#' i jest rozdzielany tabulatorem.
Najważniejsze argumenty funkcji pd.read_csv():
sep– określa oczekiwany separator.- Użyj
','dla plików rozdzielanych przecinkiem. - Użyj
'\t'dla plików rozdzielanych tabulatorem.
- Użyj
comment– przyjmuje znaki, po których w pliku występują komentarze; tekst zaczynający się od tych znaków będzie ignorowany.na_values– przyjmuje listę ciągów znaków, które mają być traktowane jakoNA/NaN. Domyślnie niektóre wartości są już rozpoznawane jakoNA/NaN– ten argument pozwala dodać kolejne.
To ćwiczenie jest częścią kursu
Wprowadzenie do importowania danych w Pythonie
Instrukcje do ćwiczenia
- Uzupełnij argumenty funkcji
pd.read_csv(), aby poprawnie zaimportować pliktitanic_corrupt.txtza pomocą pandas:sep– ustawia separator; działa tak samo jak argumentdelimiterwnp.loadtxt(). Pamiętaj, że importowany plik jest rozdzielany tabulatorem.comment– przyjmuje znaki, po których w pliku pojawiają się komentarze; w tym przypadku jest to'#'.na_values– przyjmuje listę ciągów znaków, które mają być traktowane jakoNA/NaN; tutaj jest to ciąg'Nothing'.
- Uruchom pozostałą część kodu, aby wyświetlić nagłówek wynikowego DataFrame i narysować histogram kolumny
'Age'z danymi pasażerów Titanica.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# Import matplotlib.pyplot as plt
import matplotlib.pyplot as plt
# Assign filename: file
file = 'titanic_corrupt.txt'
# Import file: data
data = pd.read_csv(file, sep='____', comment='____', na_values=[____])
# Print the head of the DataFrame
print(data.head())
# Plot 'Age' variable in a histogram
pd.DataFrame.hist(data[['Age']])
plt.xlabel('Age (years)')
plt.ylabel('count')
plt.show()