Перейти к содержимому

Как разделить датафрейм pandas на части

  • автор:

Как разделить фрейм данных Pandas на несколько фреймов данных

Вы можете использовать следующий базовый синтаксис для разделения кадра данных pandas на несколько кадров данных на основе номера строки:

#split DataFrame into two DataFrames at row 6 df1 = df.iloc [:6] df2 = df.iloc [6:] 

В следующих примерах показано, как использовать этот синтаксис на практике.

Пример 1: разделить Pandas DataFrame на два DataFrames

Следующий код показывает, как разделить один кадр данных pandas на два кадра данных:

import pandas as pd #create DataFrame df = pd.DataFrame() #view DataFrame df x y 0 1 5 1 1 7 2 1 7 3 3 9 4 3 12 5 4 9 6 5 9 7 5 4 8 5 3 9 6 3 10 7 1 11 9 10 #split original DataFrame into two DataFrames df1 = df.iloc [:6] df2 = df.iloc [6:] #view resulting DataFrames print(df1) x y 0 1 5 1 1 7 2 1 7 3 3 9 4 3 12 5 4 9 print(df2) x y 6 5 9 7 5 4 8 5 3 9 6 3 10 7 1 11 9 10 

Обратите внимание, что df1 содержит первые шесть строк исходного DataFrame, а df2 содержит последние шесть строк исходного DataFrame.

Пример 2: Разделение Pandas DataFrame на несколько DataFrames

Следующий код показывает, как разделить pandas

import pandas as pd #create DataFrame df = pd.DataFrame() #split into three DataFrames df1 = df.iloc [:3] df2 = df.iloc [3:6] df3 = df.iloc [6:] #view resulting DataFrames print(df1) x y 0 1 5 1 1 7 2 1 7 print(df2) x y 3 3 9 4 3 12 5 4 9 print(df3) x y 6 5 9 7 5 4 8 5 3 9 6 3 10 7 1 11 9 10 

В этом примере мы решили разделить один DataFrame на три DataFrames, но, используя этот синтаксис, мы можем разделить DataFrame pandas на любое количество DataFrames, которое нам нужно.

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные функции в pandas:

Pandas: как разделить DataFrame по значению столбца

Вы можете использовать следующий базовый синтаксис для разделения кадра данных pandas по значению столбца:

#define value to split on x = 20 #define df1 as DataFrame where 'column_name' is >= 20 df1 = df[df['column_name'] >= x] #define df2 as DataFrame where 'column_name' is < 20 df2 = df[df['column_name'] < x] 

В следующем примере показано, как использовать этот синтаксис на практике.

Пример: разделение Pandas DataFrame по значению столбца

Предположим, у нас есть следующие Pandas DataFrame:

import pandas as pd #create DataFrame df = pd.DataFrame() #view DataFrame print(df) team points rebounds 0 A 22 11 1 B 24 8 2 C 19 10 3 D 18 6 4 E 14 6 5 F 29 5 6 G 31 9 7 H 16 12 

Мы можем использовать следующий код, чтобы разделить DataFrame на два DataFrame, где первый содержит строки, где «точки» больше или равны 20, а второй содержит строки, где «точки» меньше 20:

#define value to split on x = 20 #define df1 as DataFrame where 'points' is >= 20 df1 = df[df['points'] >= x] print(df1) team points rebounds 0 A 22 11 1 B 24 8 5 F 29 5 6 G 31 9 #define df2 as DataFrame where 'points' is < 20 df2 = df[df['points'] < x] print(df2) team points rebounds 2 C 19 10 3 D 18 6 4 E 14 6 7 H 16 12 

Обратите внимание, что мы также можем использовать функцию reset_index() для сброса значений индекса для каждого результирующего DataFrame:

#define value to split on x = 20 #define df1 as DataFrame where 'points' is >= 20 df1 = df[df['points'] >= x]. reset_index(drop= True ) print(df1) team points rebounds 0 A 22 11 1 B 24 8 2 F 29 5 3 G 31 9 #define df2 as DataFrame where 'points' is < 20 df2 = df[df['points'] < x]. reset_index(drop= True ) print(df2) team points rebounds 0 C 19 10 1 D 18 6 2 E 14 6 3 H 16 12 

Обратите внимание, что индекс для каждого результирующего DataFrame теперь начинается с 0.

Дополнительные ресурсы

В следующих руководствах объясняется, как исправить другие распространенные ошибки в Python:

Разделить фрейм Pandas на две случайных выборки

Author24 — интернет-сервис помощи студентам

Фрейм разделить на серию
Добрый день! Мне нужно все значения из колонок фрейма разделить на серию. Пока делаю все через.

Как в столбце через Pandas разделить на части число?
Добрый день! Как в Pandas поменять в столбце 1235010159 -> 0123-501-0159 Пытался сделать так: .

Pandas, дублирование/удаление случайных строк по правилам
Привет, есть некоторые данные, допустим они выглядят так: есть 3 юзера, у каждого из них есть 2.

182 / 194 / 42
Регистрация: 21.01.2019
Сообщений: 919

VistaSV30,
Если объединить код, создающий фрейм данных df и образец А в одной строке ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
import pandas as pd t = '''F5 F61 F62 F159 F160 F71 0 2010-01-01 3.0 28.0 3.0 39.0 2010-01-01 1 2010-01-01 16.0 51.0 17.0 50.0 2010-01-01 2 2010-01-01 17.0 50.0 18.0 17.0 2010-01-01 3 2010-01-02 6.0 23.0 6.0 55.0 2010-01-02 4 2010-01-04 20.0 47.0 21.0 0.0 2010-01-04 5 2010-01-08 5.0 44.0 11.0 2.0 2010-01-08 6 2010-01-08 10.0 48.0 0.0 0.0 2010-01-08 7 2010-01-09 3.0 49.0 5.0 52.0 2010-01-09 8 2010-01-10 22.0 55.0 23.0 35.0 2010-01-10 9 2010-01-11 5.0 29.0 6.0 9.0 2010-01-11''' df = pd.DataFrame([i.split() for i in t.splitlines()[1:]], columns=['0'] + t.splitlines()[0].split()) A = df.sample(n=7, random_state=0, drop='first') B = df.drop(A.index)

Эксперт Python

7908 / 4194 / 1808
Регистрация: 27.03.2020
Сообщений: 7,013

Лучший ответ

Сообщение было отмечено VistaSV30 как решение

Решение

VistaSV30,

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
import pandas as pd import numpy as np t = '''F5 F61 F62 F159 F160 F71 0 2010-01-01 3.0 28.0 3.0 39.0 2010-01-01 1 2010-01-01 16.0 51.0 17.0 50.0 2010-01-01 2 2010-01-01 17.0 50.0 18.0 17.0 2010-01-01 3 2010-01-02 6.0 23.0 6.0 55.0 2010-01-02 4 2010-01-04 20.0 47.0 21.0 0.0 2010-01-04 5 2010-01-08 5.0 44.0 11.0 2.0 2010-01-08 6 2010-01-08 10.0 48.0 0.0 0.0 2010-01-08 7 2010-01-09 3.0 49.0 5.0 52.0 2010-01-09 8 2010-01-10 22.0 55.0 23.0 35.0 2010-01-10 9 2010-01-11 5.0 29.0 6.0 9.0 2010-01-11''' t = t.splitlines() df = pd.DataFrame([i.split()[1:] for i in t[1:]], columns=t[0].split()) # 1. ind = np.arange(len(df)) np.random.shuffle(ind) print(df.iloc[ind[:7], :]) print(df.iloc[ind[7:], :]) # 2. df1 = df.sample(frac=1) print(df1.iloc[:7, :]) print(df1.iloc[7:, :])

Как разделить данные в строке Pandas?

Добрый день, пытаюсь постигать библиотеку Pandas и захотелось провести исследование по количеству и особенностям фильмов разных жанров в одном датасете.

5f242da294793948612067.jpeg

В датафрейме имеется столбец с жанрами, разделенными данным знаком |.
Хочу преобразовать свои данные так, чтобы в моем датафрейме каждая строка имела лишь один жанр и пусть фильмы будут повторятся, потом я просто буду удобно группировать данные по названию фильма.
В голове лишь вертится применение функции split, но дальше продолжить идею я не могу

  • Вопрос задан более трёх лет назад
  • 1090 просмотров

Комментировать

Решения вопроса 1

LazyTalent

Дмитрий @LazyTalent

Data Engineer, Freelancer

>>> import pandas as pd >>> df = pd.DataFrame([['123', 'Anime|Action'], ['321', 'Adventure|Comedy']], columns=['title', 'genre']) >>> df title genre 0 123 Anime|Action 1 321 Adventure|Comedy >>> df['genre'] = df['genre'].apply(lambda x: x.split('|')) >>> df title genre 0 123 [Anime, Action] 1 321 [Adventure, Comedy] >>> df.explode('genre') title genre 0 123 Anime 0 123 Action 1 321 Adventure 1 321 Comedy

Ответ написан более трёх лет назад

Комментировать

Нравится 4 Комментировать

Ответы на вопрос 1

Имхо целесообразнее сделать атрибуты вроде "являяется ли комедией ? да/нет (1/0)", для этого ввести доп. столбцы. Если дублировать строки, то также сильно увеличится размер датафрейма.

import pandas df1=pandas.DataFrame.from_records(( (1, 'xxx', 'Adv|Ani|Doc'), (2, 'yyy', 'Adv|Doc'), (3, 'zzz', 'Comedy|Doc')), columns=['movieId','title','genres']) genres_list=('Adv','Ani','Doc','Comedy') for i in genres_list: df1[i]=[0]*len(df1) #сначала прописать всем нули print (df1) for idx, row in df1.iterrows(): c=(row[2]) l=c.split('|') for g in genres_list: if g in l: df1.loc[idx, g]=1 print (df1) movieId title genres Adv Ani Doc Comedy 0 1 xxx Adv|Ani|Doc 0 0 0 0 1 2 yyy Adv|Doc 0 0 0 0 2 3 zzz Comedy|Doc 0 0 0 0 movieId title genres Adv Ani Doc Comedy 0 1 xxx Adv|Ani|Doc 1 1 1 0 1 2 yyy Adv|Doc 1 0 1 0 2 3 zzz Comedy|Doc 0 0 1 1

Ответ написан более трёх лет назад

Комментировать

Нравится 2 Комментировать

Ваш ответ на вопрос

Войдите, чтобы написать ответ

python

  • Python
  • +1 ещё

Error Connecting: HTTPSConnectionPool(host='url', port=443) как решить?

  • 1 подписчик
  • 5 часов назад
  • 12 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

https://czena.narkolog-na-dom-voronezh-11.ru/