매 n번째 줄 팬더
Dataframe.resample()
는 시계열 데이터에 대해서만 작동합니다.시계열이 아닌 데이터에서 n번째 행을 모두 얻을 수 있는 방법을 찾을 수 없습니다.가장 좋은 방법은 무엇입니까?
사용합니다.iloc
, 이것은 정수 위치와 일반적인 파이썬 구문을 따르는 행/열 슬라이스를 사용합니다.5번째 행마다 원하는 경우:
df.iloc[::5, :]
@chrisb의 수락된 답변이 질문에 답을 주지만, 저는 여기에 다음과 같이 덧붙이고 싶습니다.
내가 사용하는 간단한 방법은nth
data 또는 drop thenth
행은 다음과 같습니다.
df1 = df[df.index % 3 != 0] # Excludes every 3rd row starting from 0
df2 = df[df.index % 3 == 0] # Selects every 3rd raw starting from 0
이 산술 기반 샘플링은 훨씬 더 복잡한 행 선택을 가능하게 할 수 있습니다.
이는 물론, 당신이 그들과index
0에서 시작하는 순서가 매겨진, 연속된, 정수의 열.
직접 호출하는 것을 포함하는 수락된 답변에 대한 훨씬 더 간단한 해결책이 있습니다.df.__getitem__
.
df = pd.DataFrame('x', index=range(5), columns=list('abc'))
df
a b c
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
예를 들어, 2개의 행을 얻을 때마다 다음을 수행할 수 있습니다.
df[::2]
a b c
0 x x x
2 x x x
4 x x x
인덱스에 / GroupBy.head
그룹을 지정하는 경우도 있습니다.
df.index // 2
# Int64Index([0, 0, 1, 1, 2], dtype='int64')
df.groupby(df.index // 2).first()
# Alternatively,
# df.groupby(df.index // 2).head(1)
a b c
0 x x x
1 x x x
2 x x x
인덱스는 스트라이드(이 경우 2)에 의해 바닥 분할됩니다.인덱스가 숫자가 아닌 경우 대신 다음 작업을 수행합니다.
# df.groupby(np.arange(len(df)) // 2).first()
df.groupby(pd.RangeIndex(len(df)) // 2).first()
a b c
0 x x x
1 x x x
2 x x x
추가하기reset_index()
에서 준안정 B의 답을 사용하면 행이 순서대로 연속되어 있다고 가정할 수 있습니다.
df1 = df[df.reset_index().index % 3 != 0] # Excludes every 3rd row starting from 0
df2 = df[df.reset_index().index % 3 == 0] # Selects every 3rd row starting from 0
df.reset_index().index
는 0에서 시작하여 1씩 증가하는 인덱스를 생성하므로 모듈로를 쉽게 사용할 수 있습니다.
저도 비슷한 요구사항이 있었는데, 특정 그룹의 물건이 아니길 원했습니다.이렇게 풀었어요.
groups = data.groupby(['group_key'])
selection = groups['index_col'].apply(lambda x: x % 3 == 0)
subset = data[selection]
인덱스를 사용할 때 생각해낸 솔루션이 실행 가능하지 않았습니다(multi-Gig.csv가 너무 크거나 충돌 없이 재인덱스할 수 있는 기술을 놓쳤을 수 있습니다).
한 번에 하나의 행을 걷고 n번째 행을 새 데이터 프레임에 추가합니다.
import pandas as pd
from csv import DictReader
def make_downsampled_df(filename, interval):
with open(filename, 'r') as read_obj:
csv_dict_reader = DictReader(read_obj)
column_names = csv_dict_reader.fieldnames
df = pd.DataFrame(columns=column_names)
for index, row in enumerate(csv_dict_reader):
if index % interval == 0:
print(str(row))
df = df.append(row, ignore_index=True)
return df
df.drop(labels=df[df.index % 3 != 0].index, axis=0) # every 3rd row (mod 3)
언급URL : https://stackoverflow.com/questions/25055712/pandas-every-nth-row
'programing' 카테고리의 다른 글
SQL 쿼리에서 기본값을 반환하는 방법 (0) | 2023.11.04 |
---|---|
jQuery를 사용하여 JavaScript 개체에서 항목 추가/제거 (0) | 2023.11.04 |
C 프로그래머의 관점에서 ARM 아키텍처 간의 차이? (0) | 2023.11.04 |
_REENTRANT 플래그란 무엇입니까? (0) | 2023.11.04 |
ui-grid 행의 높이를 변경하는 방법은? (0) | 2023.11.04 |