나는 이것을 가지고 DataFrame
있으며 EPS
열이 아닌 레코드 만 원합니다 NaN
.
>>> df
STK_ID EPS cash
STK_ID RPT_Date
601166 20111231 601166 NaN NaN
600036 20111231 600036 NaN 12
600016 20111231 600016 4.3 NaN
601009 20111231 601009 NaN NaN
601939 20111231 601939 2.5 NaN
000001 20111231 000001 NaN NaN
… df.drop(....)
이 결과 데이터 프레임을 얻는 것과 같은 것 :
STK_ID EPS cash
STK_ID RPT_Date
600016 20111231 600016 4.3 NaN
601939 20111231 601939 2.5 NaN
어떻게합니까?
답변
EPS가 NA가 아닌 행을 가져 가십시오.
df = df[df['EPS'].notna()]
답변
이 질문은 이미 해결되었지만 …
… 또한 원래 의견 에서 Wouter가 제안한 솔루션을 고려하십시오 . 를 포함하여 누락 된 데이터를 처리하는 기능 dropna()
은 팬더에 명시 적으로 내장되어 있습니다. 수동으로 수행하는 것보다 잠재적으로 향상된 성능 외에도 이러한 기능에는 유용한 다양한 옵션이 있습니다.
In [24]: df = pd.DataFrame(np.random.randn(10,3))
In [25]: df.iloc[::2,0] = np.nan; df.iloc[::4,1] = np.nan; df.iloc[::3,2] = np.nan;
In [26]: df
Out[26]:
0 1 2
0 NaN NaN NaN
1 2.677677 -1.466923 -0.750366
2 NaN 0.798002 -0.906038
3 0.672201 0.964789 NaN
4 NaN NaN 0.050742
5 -1.250970 0.030561 -2.678622
6 NaN 1.036043 NaN
7 0.049896 -0.308003 0.823295
8 NaN NaN 0.637482
9 -0.310130 0.078891 NaN
In [27]: df.dropna() #drop all rows that have any NaN values
Out[27]:
0 1 2
1 2.677677 -1.466923 -0.750366
5 -1.250970 0.030561 -2.678622
7 0.049896 -0.308003 0.823295
In [28]: df.dropna(how='all') #drop only if ALL columns are NaN
Out[28]:
0 1 2
1 2.677677 -1.466923 -0.750366
2 NaN 0.798002 -0.906038
3 0.672201 0.964789 NaN
4 NaN NaN 0.050742
5 -1.250970 0.030561 -2.678622
6 NaN 1.036043 NaN
7 0.049896 -0.308003 0.823295
8 NaN NaN 0.637482
9 -0.310130 0.078891 NaN
In [29]: df.dropna(thresh=2) #Drop row if it does not have at least two values that are **not** NaN
Out[29]:
0 1 2
1 2.677677 -1.466923 -0.750366
2 NaN 0.798002 -0.906038
3 0.672201 0.964789 NaN
5 -1.250970 0.030561 -2.678622
7 0.049896 -0.308003 0.823295
9 -0.310130 0.078891 NaN
In [30]: df.dropna(subset=[1]) #Drop only if NaN in specific column (as asked in the question)
Out[30]:
0 1 2
1 2.677677 -1.466923 -0.750366
2 NaN 0.798002 -0.906038
3 0.672201 0.964789 NaN
5 -1.250970 0.030561 -2.678622
6 NaN 1.036043 NaN
7 0.049896 -0.308003 0.823295
9 -0.310130 0.078891 NaN
행 대신 열 삭제를 포함하여 다른 옵션도 있습니다 ( http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.dropna.html의 문서 참조 ).
꽤 편리합니다!
답변
나는 이것이 이미 답변되었지만 아만 (일반적으로 훌륭함)의 일반적인 설명과는 달리이 특정 질문에 대한 순수한 판다 솔루션을 위해 다른 사람 이이 문제를 겪을 경우를 대비하여 알고 있습니다.
import pandas as pd
df = df[pd.notnull(df['EPS'])]
답변
이것을 사용할 수 있습니다 :
df.dropna(subset=['EPS'], how='all', inplace=True)
답변
가장 간단한 솔루션 :
filtered_df = df[df['EPS'].notnull()]
위의 솔루션은 np.isfinite ()를 사용하는 것보다 낫습니다.
답변
당신은 dataframe 방법 사용할 수 NOTNULL을 또는 반전 ISNULL , 또는 numpy.isnan :
In [332]: df[df.EPS.notnull()]
Out[332]:
STK_ID RPT_Date STK_ID.1 EPS cash
2 600016 20111231 600016 4.3 NaN
4 601939 20111231 601939 2.5 NaN
In [334]: df[~df.EPS.isnull()]
Out[334]:
STK_ID RPT_Date STK_ID.1 EPS cash
2 600016 20111231 600016 4.3 NaN
4 601939 20111231 601939 2.5 NaN
In [347]: df[~np.isnan(df.EPS)]
Out[347]:
STK_ID RPT_Date STK_ID.1 EPS cash
2 600016 20111231 600016 4.3 NaN
4 601939 20111231 601939 2.5 NaN
답변
간단하고 쉬운 방법
df.dropna(subset=['EPS'],inplace=True)
출처 : https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.dropna.html