.Net Parse по сравнению с преобразованием

Если вы пришли сюда, чтобы выбрать строки из фрейма данных, включив те, чье значение столбца НЕ является ни одним из списка значений, вот как перевернуть ответ unutbu для списка значений выше:

df.loc[~df['column_name'].isin(some_values)]

(Чтобы не включать одно значение, конечно, вы просто используете обычный оператор не равно, !=.)

Пример:

import pandas as pd
df = pd.DataFrame({'A': 'foo bar foo bar foo bar foo foo'.split(),
                   'B': 'one one two three two two one three'.split()})
print(df)

дает нам

     A      B
0  foo    one
1  bar    one
2  foo    two
3  bar  three
4  foo    two
5  bar    two
6  foo    one
7  foo  three    

Подмножество только для тех строк, которые ARE NOT one или three в столбце B:

df.loc[~df['B'].isin(['one', 'three'])]

дает

     A    B
2  foo  two
4  foo  two
5  bar  two
13
задан Mr Lister 16 December 2015 в 08:17
поделиться

5 ответов

Эти Convert.ToXXX() методы для объектов, которые могли бы иметь корректный или подобный тип, в то время как .Parse() и .TryParse() специально для строк:

//o is actually a boxed int
object o = 12345;

//unboxes it
int castVal = (int) 12345;

//o is a boxed enum
object o = MyEnum.ValueA;

//this will get the underlying int of ValueA
int convVal = Convert.ToInt32( o );

//now we have a string
string s = "12345";

//this will throw an exception if s can't be parsed
int parseVal = int.Parse( s );

//alternatively:
int tryVal;
if( int.TryParse( s, out tryVal ) ) {
    //do something with tryVal 
}

, Если Вы компилируете с флагами оптимизации TryParse, очень быстро - это - лучший способ получить число от строки. Однако, если у Вас есть объект, который мог бы быть интервалом или мог бы быть строкой, Преобразовывают. ToInt32 более быстр.

15
ответ дан 1 December 2019 в 21:39
поделиться

Вот ответ для Вас:

http://www.dotnetspider.com/forum/ViewForum.aspx?ForumId=77428

, Хотя я думаю в современных версиях.NET, лучшая вещь сделать использовать TryParse в любом случае, если существует сомнение, что преобразование будет работать.

5
ответ дан 1 December 2019 в 21:39
поделиться

Существует также метод DirectCast, который необходимо использовать, только если Вы уверены, каков тип объекта. Это быстрее, но не делает никаких надлежащих проверок. Я использую DirectCast, когда я извлекаю значения из свободно введенного DataTable, когда я знаю тип для каждого столбца.

1
ответ дан 1 December 2019 в 21:39
поделиться

Я - большой поклонник TryParse, так как он сохраняет Вас много головной боли с обнаружением ошибки, когда существует шанс значение, которое Вы собираетесь проанализировать, не имеет соответствующего типа.

Мой порядок обычно:

  • Синтаксический анализ (если я могу быть уверен, значение будет правильным типом, и я действительно пытаюсь гарантировать это)
  • TryParse (если я не могу быть уверен, который происходит каждый раз, когда ввод данных пользователем включен или введен от системы, Вы не можете управлять)
  • , Преобразовывают (который я думаю, что не использовал, так как я начал использовать Синтаксический анализ и TryParse, но я мог быть неправым)
3
ответ дан 1 December 2019 в 21:39
поделиться

Если Вам нужна скорость, я вполне уверен, прямой бросок является самым быстрым путем. Однако я обычно использую.Parse или.TryParse, потому что, кажется, делает вещи легче читать, и вести себя более предсказуемым способом.

Преобразовывают на самом деле Синтаксический анализ вызовов под капотом, я верю. Таким образом, существует мало различия там, и его действительно просто, кажется, вопрос персонального вкуса.

1
ответ дан 1 December 2019 в 21:39
поделиться
Другие вопросы по тегам:

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