1. Введение в DataFrame
DataFrame один в PandasТабличныйСтруктура данных содержит упорядоченный набор столбцов, каждый из которых может иметь различный тип значения (целое число, число с плавающей запятой, логическое значение, строка и т. д.), а DataFrame имеет индексы строк и столбцов, которые можно рассматривать какSeriesсоставленный словарь
DataFrame также можно понимать как с行和列标签
2D-массив:
- | Name | Age | Sex |
---|---|---|---|
0 | Ли Хуа | 20 | female |
1 | Хан Мэймэй | 19 | female |
2 | Ли Лей | 21 | male |
Метки строк — это серийные номера 0, 1, 2, а метки столбцов — имя, возраст, пол. DataFrame — наиболее часто используемый объект Pandas. Как и Series, DataFrame поддерживает несколько типов входных данных:
- Список, одномерный ndarray, словарь, словарь серий
- 2D ndarray
- Series
- DataFrame
В дополнение к данным вы можете дополнительно передавать параметры индекса (метки строк) и столбцов (метки столбцов). Передача индекса или столбцов гарантирует, что результирующий DataFrame содержит индексы или столбцы. При добавлении указанного индекса в словарь Series любые данные, не соответствующие переданному индексу, отбрасываются.
Когда метки осей не передаются, строить из входных данных, как обычно.
2. Создание экземпляра DataFrame
DataFrames можно создавать с помощью словарей, списков и т. д.
Если входящие данные всескалярное значение(Например, словарь: {'a':1, 'b':2}), то параметр index должен быть передан в
df = pd.DataFrame({
'name': ['lihua', 'lilei', 'hanmeimei', 'xiaoming', 'xiaohong'],
'math': [99, 100, 80, 50, 118],
'english': [94, 83, 99, 79, 108],
'chinese': [107, 82, 76, 100, 113]
})
Output:
name math english chinese
0 lihua 99 94 107
1 lilei 100 83 82
2 hanmeimei 80 99 76
3 xiaoming 50 79 100
4 xiaohong 118 108 113
3. Выбор данных строки
1. Выберите данные строки по положению (выбор одной строки)
Когда мы хотим выбрать N-ю строку данных (теоретически N должно быть меньше или равно самой большой строке, которую можно выбрать), мы можем выбрать ее следующими способами:
df.iloc[1]
Output:
name math english chinese
1 lilei 100 83 82
В этом примере мы использовалиilocметод делает выбор данных строки на основе местоположения, и не только этоilocОн также поддерживает такие функции, как нарезка строк, выбор нескольких строк и т. д. Для конкретного использования см. следующий раздел.
2. Выберите данные строки по положению (выбор нескольких строк: аналогично нарезке)
Метод 1: когда мы хотим выбрать первые N (теоретически N должно быть меньше или равно наибольшей строке, которую можно получить) или последние N строк данных, мы можем выбрать следующие способы:
df.head(2) # 取前两行数据
Output:
name math english chinese
0 lihua 99 94 107
1 lilei 100 83 82
df.tail(2) # 取最后两行数据
Output:
name math english chinese
3 xiaoming 50 79 100
4 xiaohong 118 108 113
Метод 2: Или мы также можем использовать нарезку строк, чтобы получить данные первых (обратных) N строк:
df[0:2] # 从第一行开始取,一共取两行(不包含位置为2的那行数据,只取位置下标为0,1的两行数据)
Output:
name math english chinese
0 lihua 99 94 107
1 lilei 100 83 82
df[-2:] # 从第倒查第二行开始取,一直取到末尾。
Output:
name math english chinese
3 xiaoming 50 79 100
4 xiaohong 118 108 113
Способ нарезки строк аналогичен тому, что используется в базовой структуре данных Python.Нарезка списков, поэтому нарезка строк также поддерживает нарезку в средней части, нарезку в конце и т. д. Дополнительные методы использования см. в части списка.
Способ 3. Точно так же мы можем использовать класс DataFrame.ilocметод на DataFrameсрез строки:
df.iloc[0:2] # 从第一行开始取,一共取两行(不包含位置为2的那行数据,只取位置下标为0,1的两行数据)
Output:
name math english chinese
0 lihua 99 94 107
1 lilei 100 83 82
df.iloc[-2:] # 从第倒查第二行开始取,一直取到末尾。
Output:
name math english chinese
3 xiaoming 50 79 100
4 xiaohong 118 108 113
df.iloc[[0, 1, 3]] # 取第一行,第二行、以及第四行数据
Output:
name math english chinese
0 lihua 99 94 107
1 lilei 100 83 82
3 xiaoming 50 79 100
При использовании метода iloc для среза используйте df.iloc[[0,1]] для достижения того же эффекта, что и df.iloc[0:2]. Вы можете попробовать это сами, чтобы увидеть эффект.
Нарезка строк примерно аналогична нарезке iloc, но следует отметить, что нарезка iloc более гибкая. Использование iloc может не только выполнять срезы, но и поддерживать прерывистые срезы, см. приведенный выше пример (просто передать массив позиций строки, которую нужно получить), и iloc также может получить указанную одиночную строку (см. пример в следующем подразделе). )
3. Выберите данные одной (несколько) строк по значению индекса
В отличие от получения указанных данных строки по положению, мы также можемзначение индексачтобы получить соответствующие данные строки:
df.loc[0] #获取索引值为0的那一行的数据
Output:
name math english chinese
0 lihua 99 94 107
df.loc[[1,3]] #获取索引值为1和3的行数据
Output:
name math english chinese
1 lilei 100 83 82
3 xiaoming 50 79 100
вышеlocЗначение параметра, переданное в примере, является значением индекса при создании экземпляра DataFrame,Это не ценность позиции и не может быть понята как позиция.. Поскольку мы не передали параметр индекса при создании экземпляра DataFrame в этом примере, будет сгенерирована последовательность индексов по умолчанию (инкрементная последовательность, начинающаяся с 0), поэтому последовательность индексов в этом примере точно такая же, как последовательность позиций, поэтому причинаlocиilocНет иллюзии различия. В реальном использовании, если последовательность индекса (index) ['a', 'b', 'c', 'd', 'e'], то, если мы используем loc для получения данных строки, параметры, которые должны быть переданы in — значение в последовательности индексов.
locиilocРазница не только отражена в том, что первый основан на индексе, второй основан на выборе данных строки на основе местоположения, и в то же времяlocтакже поддерживаетВыберите указанные данные столбца:
df.loc[[0, 1], ['name', 'math']] #获取前两行数据,同时指定列数据为name和math
Output:
name math
0 lihua 99
1 lilei 100
4. Выберите указанные данные строки по условию (bool)
DataFrame помогает нам получать указанные данные строки в соответствии с пользовательскими условиями поиска, такими как name='xxx' или 15