판다 데이터 프레임에서 NaN을 사용하여 행의 정수 인덱스 찾기
다음과 같은 판다 데이터 프레임이 있습니다.
a b
2011-01-01 00:00:00 1.883381 -0.416629
2011-01-01 01:00:00 0.149948 -1.782170
2011-01-01 02:00:00 -0.407604 0.314168
2011-01-01 03:00:00 1.452354 NaN
2011-01-01 04:00:00 -1.224869 -0.947457
2011-01-01 05:00:00 0.498326 0.070416
2011-01-01 06:00:00 0.401665 NaN
2011-01-01 07:00:00 -0.019766 0.533641
2011-01-01 08:00:00 -1.101303 -1.408561
2011-01-01 09:00:00 1.671795 -0.764629
NaN이 있는 행의 "정수" 인덱스를 효율적으로 찾을 수 있는 방법이 있습니까?이 경우 원하는 출력은 다음과 같아야 합니다.[3, 6]
.
더 간단한 솔루션은 다음과 같습니다.
inds = pd.isnull(df).any(1).nonzero()[0]
In [9]: df
Out[9]:
0 1
0 0.450319 0.062595
1 -0.673058 0.156073
2 -0.871179 -0.118575
3 0.594188 NaN
4 -1.017903 -0.484744
5 0.860375 0.239265
6 -0.640070 NaN
7 -0.535802 1.632932
8 0.876523 -0.153634
9 -0.686914 0.131185
In [10]: pd.isnull(df).any(1).nonzero()[0]
Out[10]: array([3, 6])
데이터 프레임용df
:
import numpy as np
index = df['b'].index[df['b'].apply(np.isnan)]
당신에게 돌려줄 것입니다.MultiIndex
다시 인덱싱하는 데 사용할 수 있습니다.df
예:
df['a'].ix[index[0]]
>>> 1.452354
정수 인덱스의 경우:
df_index = df.index.values.tolist()
[df_index.index(i) for i in index]
>>> [3, 6]
한 줄 솔루션.그러나 하나의 열에서만 작동합니다.
df.loc[pandas.isna(df["b"]), :].index
그리고 만약 여러분이 모든 열에 대한 'nan'의 좌표를 대신 찾고 싶다면, 다음과 같습니다(모든 열이 숫자라고 가정하면).
df = pd.DataFrame([[0,1,3,4,np.nan,2],[3,5,6,np.nan,3,3]])
df
0 1 2 3 4 5
0 0 1 3 4.0 NaN 2
1 3 5 6 NaN 3.0 3
np.where(np.asanyarray(np.isnan(df)))
(array([0, 1]), array([4, 3]))
이것이 너무 늦었는지는 모르겠지만 np를 사용할 수 있습니다.다음과 같은 비값의 인덱스를 찾을 수 있는 위치:
indices = list(np.where(df['b'].isna()[0]))
날짜/시간 인덱스가 있고 다음 값을 가지려는 경우:
df.loc[pd.isnull(df).any(1), :].index.values
다음은 몇 가지 방법에 대한 테스트입니다.
%timeit np.where(np.isnan(df['b']))[0]
%timeit pd.isnull(df['b']).nonzero()[0]
%timeit np.where(df['b'].isna())[0]
%timeit df.loc[pd.isna(df['b']), :].index
그리고 그에 상응하는 시기:
333 µs ± 9.95 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
280 µs ± 220 ns per loop (mean ± std. dev. of 7 runs, 1000 loops each)
313 µs ± 128 ns per loop (mean ± std. dev. of 7 runs, 1000 loops each)
6.84 ms ± 1.59 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
는 것으로 보입니다.pd.isnull(df['DRGWeight']).nonzero()[0]
시간적 측면에서 승리하지만 상위 세 가지 방법 중 어느 것이든 비슷한 성능을 가지고 있습니다.
또 다른 간단한 해결책은list(np.where(df['b'].isnull())[0])
이렇게 하면 각 열의 nan에 대한 인덱스 값이 표시됩니다.
df.loc[pd.isna(df).any(1), :].index
다음은 더 간단한 방법입니다.
df = pd.DataFrame([[0,1,3,4,np.nan,2],[3,5,6,np.nan,3,3]])
inds = np.asarray(df.isnull()).nonzero()
(array([0, 1], dtype=int64), array([4, 3], dtype=int64))
NaN 값을 가진 행의 모든 인덱스를 찾고 있었습니다.
내 작업 솔루션:
def get_nan_indexes(data_frame):
indexes = []
print(data_frame)
for column in data_frame:
index = data_frame[column].index[data_frame[column].apply(np.isnan)]
if len(index):
indexes.append(index[0])
df_index = data_frame.index.values.tolist()
return [df_index.index(i) for i in set(indexes)]
데이터 프레임의 이름을 df로 지정하고 관심 열(즉, null을 찾으려는 열)을 'b'로 지정합니다.그런 다음 다음 다음 스니펫은 데이터 프레임에서 원하는 null 인덱스를 제공합니다.
for i in range(df.shape[0]):
if df['b'].isnull().iloc[i]:
print(i)
index_nan = []
for index, bool_v in df["b"].iteritems().isna():
if bool_v == True:
index_nan.append(index)
print(index_nan)
이 문제에 대한 빠르고 빠른 해결책은 다음과 같습니다.
# Find the integer index of nulls
nan_idx = np.where(df['column_name'].isnull())[0]
# Find actual index of the nan's
nan_idx = df.iloc[nan_idx].index
간편한 솔루션:
# Find the index of nulls
indx = df[df.isnull()].index
# Find the index of nulls of a column or a group of columns
indx_A = df[df['A'].isnull()].index
col_list = ['A','B','C']
indx_col_list = df[df[col_list].isnull()].index
A DataFrame
개체에 기본 제공 기능이 있습니다.isna()
즉, 다음과 같이 해결할 수 있습니다.
하나의 NaN 값으로 인덱스를 반환하기에 충분한 경우:
index_na = df.index[df.isna().any(1)]
모두 NaN이어야 하는 경우:
index_na = df.index[df.isna().all(1)]
첫 번째 사례에 대한 숫자 인덱스를 반환하는 방법
index_na_num = np.where(df.isna().any(1)[0])
언급URL : https://stackoverflow.com/questions/14016247/find-integer-index-of-rows-with-nan-in-pandas-dataframe
'source' 카테고리의 다른 글
document.ready()에서 jQuery Deferred를 받을 수 있습니까? (0) | 2023.08.22 |
---|---|
INNODB -> 기본 열이 0이어야 합니까 아니면 null이어야 합니까? (0) | 2023.08.22 |
"R을 변수로 확인할 수 없음"? (0) | 2023.08.22 |
어떻게 하면 CSS로 전체 웹 페이지를 확장할 수 있습니까? (0) | 2023.08.22 |
페이지 C# ASP.NET 새로 고침 (0) | 2023.08.22 |