2016-04-28 3 views
1

У меня есть панды DataFrame DF1 со следующим содержанием:Создание панд dataFrame на основе некоторых значений столбца другого dataFrame

Serial N   year   current 
    B    10   14 
    B    10   16 
    B    11   10 
    B    11    
    B    11   15 
    C    12   11 
    C       9 
    C    12   13 
    C    12    

Я хотел бы сделать DataFrame, который основан на df1 но имеет любую строку содержащий пустое значение. Например:

Serial N   year   current 
    B    10   14 
    B    10   16 
    B    11   10 
    B    11   15 
    C    12   11 
    C    12   13 

Я пытался что-то вроде этого

df1=df[~np.isnan(df["year"]) or ~np.isnan(df["current"])] 

Но я получил следующее сообщение об ошибке:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). 

Что может быть проблема?

ответ

2

Вы можете просто позвонить dropna для достижения этой цели:

df1 = df.dropna() 

Как почему то, что вы пытались не удалось or оператор не понимает, что он должен делать при сопоставлении массивов, подобных структурам, поскольку он является двусмысленным, если 1 или более элементов соответствуют логическим критериям, вы должны использовать побитовые операторы &, | и ~ для and, or и not повторно. Кроме того, для нескольких условий вам необходимо скопировать условия в круглых скобках из-за приоритета оператора.

In [4]: 
df.dropna() 

Out[4]: 
    Serial N year current 
0  B 10  14 
1  B 10  16 
2  B 11  10 
4  B 11  15 
5  C 12  11 
7  C 12  13 
+1

Или 'df1 = df.dropna()' – Thanos

+0

@Thanos действительно, обновили – EdChum

+0

Спасибо. Это прекрасно работает – user3841581

2

Пожалуйста, попробуйте с побитовым оператором | вместо, как это:

df1=df[ (~np.isnan(df["year"])) | (~np.isnan(df["current"]))] 

Использование dropna(), как это было предложено EdChum, вероятно, самым чистое и опрятным решение здесь. Вы можете прочитать больше об этом или работать с отсутствующими данными обычно here

2

, если у вас действительно есть пустые ячейки вместо Нэн:

In [122]: df 
Out[122]: 
    Serial_N year current 
0  B 10.0 14.0 
1  B 10.0 16.0 
2  B 11.0 10.0 
3  B 11.0 
4  B 11.0 15.0 
5  C 12.0 11.0 
6  C   9.0 
7  C 12.0 13.0 
8  C 12.0 

In [123]: a.replace('', np.nan).dropna() 
Out[123]: 
    Serial_N year current 
0  B 10.0 14.0 
1  B 10.0 16.0 
2  B 11.0 10.0 
4  B 11.0 15.0 
5  C 12.0 11.0 
7  C 12.0 13.0 
Смежные вопросы