Удаление строк, где объект NaN [дубликат]

URLEncoder должен быть способом. Вам нужно только иметь в виду только кодировать только имя и / или значение имени строки запроса, а не весь URL-адрес, а не символ разделителя параметров строки запроса & или имя параметра- символ разделителя значений =.

String q = "random word £500 bank $";
String url = "http://example.com/query?q=" + URLEncoder.encode(q, "UTF-8");

Обратите внимание, что пробелы в параметрах запроса представлены +, а не %20, что является законно действительным. %20 обычно используется для представления пробелов в самом URI (часть перед символом разделителя строки URI-запроса ?), а не в строке запроса (часть после ?).

Также обратите внимание, что существует два метода encode(). Один без аргумента набора символов и другой. Тот, у кого аргумент без аргумента, устарел. Никогда не используйте его и всегда указывайте аргумент charset. javadoc даже явно рекомендует использовать кодировку UTF-8, как это предусмотрено RFC3986 и W3C .

Все остальные символы небезопасны и сначала преобразуются в один или несколько байтов, используя некоторую схему кодирования. Затем каждый байт представлен 3-символьной строкой «% xy», где xy - двухзначное шестнадцатеричное представление байта. Рекомендуемой схемой кодирования для использования является UTF-8. Однако, по соображениям совместимости, если кодировка не указана, используется кодировка по умолчанию платформы.

См. Также:

477
задан Ninjakannon 5 January 2017 в 18:01
поделиться

11 ответов

Не drop. Просто возьмите строки, где EPS конечен:

df = df[np.isfinite(df['EPS'])]
359
ответ дан eumiro 17 August 2018 в 15:34
поделиться
  • 1
    Я рекомендую использовать pandas.notnull вместо np.isfinite – Wes McKinney 21 November 2012 в 05:08
  • 2
    Есть ли какие-либо преимущества для индексирования и копирования при удалении? – Robert Muil 31 July 2015 в 08:15
  • 3
    Создает ошибку: TypeError: ufunc 'isfinite' не поддерживается для типов ввода, и входы не могут быть безопасно привязаны к любым поддерживаемым типам в соответствии с правилом литья '' safe '' – Philipp Schwarz 7 October 2016 в 13:18
  • 4
    @ wes-mckinney может, пожалуйста, дайте мне знать, если dropna () - лучший выбор по сравнению с pandas.notnull в этом случае? Если да, то почему? – stormfield 7 September 2017 в 11:53
  • 5
    @PhilippSchwarz Эта ошибка возникает, если столбец (EPS в примере) содержит строки или другие типы, которые нельзя переварить np.isfinite(). Я рекомендую использовать pandas.notnull(), который будет обрабатывать это более щедро. – normanius 5 April 2018 в 10:02

Он может быть добавлен при этом '& amp;' может использоваться для добавления дополнительных условий, например

df = df[(df.EPS > 2.0) & (df.EPS <4.0)]

Обратите внимание, что при оценке утверждений панды нужны скобки.

0
ответ дан aesede 17 August 2018 в 15:34
поделиться
  • 1
    Извините, но я хочу что-то еще. Если ваш код неверен, верните ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().. Вам нужно добавить круглые скобки - df = df[(df.EPS > 2.0) & (df.EPS <4.0)], но также это не ответ на этот вопрос. – jezrael 16 March 2016 в 12:52

Вы можете использовать метод 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
19
ответ дан Anton Protopopov 17 August 2018 в 15:34
поделиться

Я знаю, что это уже было дан ответ, но только ради чисто пандского решения этого конкретного вопроса, в отличие от общего описания из Амана (что было замечательно), и в случае, если кто-то еще случится на этом:

import pandas as pd
df = df[pd.notnull(df['EPS'])]
83
ответ дан Kirk Hadley 17 August 2018 в 15:34
поделиться
  • 1
    Собственно, конкретным ответом будет: df.dropna(subset=['EPS']) (на основе общего описания Амана, конечно, это также работает) – joris 23 April 2014 в 13:53
  • 2
    notnull также является тем, что Wes (автор Pandas) предложил в своем комментарии к другому ответу. – fantabolous 9 July 2014 в 04:24
  • 3
    Это может быть вопрос о нобе. Но когда я делаю df [pd.notnull (...) или df.dropna, индекс падает. Таким образом, если в индексе строк 10 в df длины 200 имелось нулевое значение. В кадре данных после запуска функции кавычек имеются значения индекса от 1 до 9, а затем от 11 до 200. В любом случае, чтобы «переиндексировать», Это – Aakash Gupta 4 March 2016 в 07:03

еще одно решение, которое использует тот факт, что np.nan != np.nan:

In [149]: df.query("EPS == EPS")
Out[149]:
                 STK_ID  EPS  cash
STK_ID RPT_Date
600016 20111231  600016  4.3   NaN
601939 20111231  601939  2.5   NaN
8
ответ дан MaxU 17 August 2018 в 15:34
поделиться

Вы можете использовать это:

df.dropna(subset=['EPS'], how='all', inplace = True)
28
ответ дан Mojtaba Khodadadi 17 August 2018 в 15:34
поделиться
  • 1
    how='all' здесь избыточно, потому что вы подмножите данные только с одним полем, так что оба 'all' и 'any' будут иметь тот же эффект. – Anton Protopopov 16 January 2018 в 13:41

По какой-то причине ни один из ранее представленных ответов не работал для меня. Это базовое решение:

df = df[df.EPS >= 0]

Хотя, конечно, это также приведет к потере строк с отрицательными номерами. Так что, если вы хотите, то это, вероятно, полезно добавить и после этого.

df = df[df.EPS <= 0]
-1
ответ дан samthebrand 17 August 2018 в 15:34
поделиться

Самый простой из всех решений:

filtered_df = df[df['EPS'].notnull()]

Вышеупомянутое решение лучше, чем использование np.isfinite ()

616
ответ дан user2285236 17 August 2018 в 15:34
поделиться
  • 1
    вы также можете использовать df.dropna(subset = ['column_name']). Надеюсь, что спасет хотя бы одного человека дополнительные 5 секунд «что я делаю неправильно». Отличный ответ, +1 – James Tobin 18 June 2014 в 15:07
  • 2
    @JamesTobin, я просто потратил 20 минут, чтобы написать функцию для этого! Официальная документация была очень загадочной: «Ярлыки вдоль другой оси, чтобы рассмотреть, например. если вы отбрасываете строки, это будет список столбцов для включения & quot ;. Я не мог понять, что они имели в виду ... – osa 6 September 2014 в 00:52
  • 3
    Это должно быть №1 – Cord Kaldemeyer 20 October 2017 в 13:10
  • 4
    isfinite (), вероятно, более pythonic, но этот ответ более изящный и соответствует принципам pandas. Отличный ответ. – TheProletariat 20 March 2018 в 22:51
622
ответ дан user2285236 6 September 2018 в 10:13
поделиться
0
ответ дан U9-Forward 29 October 2018 в 16:49
поделиться
0
ответ дан Umer 29 October 2018 в 16:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: