Как разделить фрейм данных 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:
Разбить датафрейм на несколько частей по условию
Количество значений в датафрейме может быть любое, но гарантировано, что есть как минимум 2 повторяющиеся части и одна лишняя строка, которая их разделяет (значение этой строки тоже может быть произвольным). Как разделить такой датафрейм на несколько частей, при этом чтоб во втором датафрейме повторялись названия столбцов как в первом Пример для использования
q = [['a', 'b', 'c'], ['количество', 23, 45], ['итог', 100, 120], ['лишнее', 'лишнее', 'лишнее'], ['количество', 35, 87], ['итог', 76, 90]] qw = pd.DataFrame(q, columns=q[0]) qw = qw[1:] qw
Нужно получить два датафрейма
[['a', 'b', 'c'], ['количество', 23, 45], ['итог', 100, 120]]
[['a', 'b', 'c'], ['количество', 35, 87], ['итог', 76, 90]]
Как разделить данные в строке Pandas?
Добрый день, пытаюсь постигать библиотеку Pandas и захотелось провести исследование по количеству и особенностям фильмов разных жанров в одном датасете.

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

Дмитрий @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
- +1 ещё
Как отфильтровать текст Python?
- 1 подписчик
- час назад
- 37 просмотров
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: