Здесь я попробовал методы для проверки одородности таблиц и чистки столбцов .describe() .str.contains('%') .replace('%','').get .replace('%','').astype(int) .index.value_counts()
Как-то все трудно шло, отчасти потому, что не могу понять принципов построения методов. Например, долго искал, как превести столбец в числовой формат, оказалось все очень просто .astype(int)
# The usual preamble
%matplotlib inline
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
# Make the graphs a bit prettier, and bigger
pd.set_option('display.mpl_style', 'default')
plt.rcParams['figure.figsize'] = (15, 5)
from StringIO import StringIO
aprpath000 = '/media/MYLINUXLIVE/Documents/Xpdf/aerbu_2014_all_csv/1aug2/000_eng_car-sales-in-april-2014.csv'
pd000 = pd.read_csv(aprpath000, error_bad_lines=False)
pd000
1. Чтобы узнать количество ненулевых ячеек в каждом столбце, надо настроить .info()¶
pd000.info(verbose=True, buf=None, max_cols=None, memory_usage=True, null_counts=True)
verbose : {None, True, False}, optional
Whether to print the full summary. None follows the display.max_info_columns setting. True or False overrides the display.max_info_columns setting.
buf : writable buffer, defaults to sys.stdout
max_cols : int, default None
Determines whether full summary or short summary is printed. None follows the display.max_info_columns setting.
memory_usage : boolean, default None
Specifies whether total memory usage of the DataFrame elements (including index) should be displayed. None follows the display.memory_usage setting. True or False overrides the display.memory_usage setting. Memory usage is shown in human-readable units (base-2 representation).
null_counts : boolean, default None
Whether to show the non-null counts If None, then only show if the frame is smaller than max_info_rows and max_info_columns. If True, always show counts. If False, never show counts.
pd000.describe()
Я настолько привык к автоматическому переопределению типов, что надеюся убрать знак % в столбцах "YoY % " и посчитать описания для всех столбцов
pd000['YoY %'].str.contains('%') #p.210 | Chapter 7: Data Wrangling: Clean, Transform, Merge, Reshape
Строковые операторы можно применять ко всему столбцу сразу (Series)¶
pstr = pd000['YoY %'].str
Пробуем убрать из столбца "лишние символы" при помощи .replace()
pstr.replace('%','').describe()
Теперь я хотел бы конвертировать столбец строк в столбец чисел (чтобы посчитать средние, например)
dir(pstr)
Сначала попробуем тупой вариант, здесь срабатывают все варианты для... Так что пока не пойму, конвертирует ли Pandas автоматически, очевидно, что для строковых объектов, вряд ли:
#pstr = pd000['YoY %'].str - мы сами задали объект, как строку
pstr.mean
Так как конвертировать строку в число?¶
pd000
pstr.replace('%','').get
pstr.replace('%','').astype(int)
Вот он, приемлемый вариант для конвертации .astype(int)
2. Чтобы проверить уникальность значений в столбце используем .value_counts()¶
Здесь мы проверяем столбец индекса. Он у нас по умолчанию получился и соответствует названиям марок. Напомним, что в предыдущем посте мы работали с полным файлом, в котором строка "Mersedes-Benz van" содержала 9 полей (а все 8) и кроме того, была еще строка "Mersedes-Benz"... что с ними делать... еще не решено.
pd000.index.value_counts()
Очевидно, что подсчет уникальных значений не панацея..., но его рекомендуют авторы мануалов (ссылки в начале поста)
Теперь подсчитаем уникальные значения в обычном столбце:
pd000['YoY %'].value_counts()
Или вот так: .unique()¶
pd000['YoY %'].unique()
####Из столбца можно выбрать конкретный элемент по индексу
column = pd000['YoY %']
column.Lada
pd000['YoY %'].Lada
pd000['YoY %'].Lada = '-16%'
pd000['YoY %'].Lada
Значения "ячейке" можно переприсвоить.
aprpath = '/media/MYLINUXLIVE/Documents/Xpdf/aerbu_2014_all_csv/1aug2/eng_car-sales-in-april-2014.csv'
#
#pd = pd.read_csv(aprpath, error_bad_lines=False)
pd
Методы для обработки столбца¶
dir(column)
Методы объекта DataFrame¶
dir(pd000)
dict(pd000)
Посты чуть ниже также могут вас заинтересовать
Комментариев нет:
Отправить комментарий