Как я могу выбрать определенные строки в пандах? [Дубликат]

Вот еще один случай, когда сырые типы вас укусят:

public class StrangeClass<T> {
  @SuppressWarnings("unchecked")
  public <X> X getSomethingElse() {
    return (X)"Testing something else!";
  }

  public static void main(String[] args) {
    final StrangeClass<Object> withGeneric    = new StrangeClass<>();
    final StrangeClass         withoutGeneric = new StrangeClass();
    final String               value1,
                               value2;

    // Works
    value1 = withGeneric.getSomethingElse();

    // Produces compile error:
    // incompatible types: java.lang.Object cannot be converted to java.lang.String
    value2 = withoutGeneric.getSomethingElse();
  }
}

Как уже упоминалось в принятом ответе, вы теряете всю поддержку дженериков в коде необработанного типа. Каждый параметр типа преобразуется в его стирание (которое в приведенном выше примере просто Object).

49
задан yoshiserry 28 February 2014 в 06:21
поделиться

2 ответа

Используя оператор &, не забудьте обернуть подзапросы с помощью ():

males = df[(df[Gender]=='Male') & (df[Year]==2014)]

Чтобы сохранить ваши данные в файле dict с помощью цикла for:

from collections import defaultdict
dic={}
for g in ['male', 'female']:
  dic[g]=defaultdict(dict)
  for y in [2013, 2014]:
    dic[g][y]=df[(df[Gender]==g) & (df[Year]==y)] #store the DataFrames to a dict of dict

EDIT:

Демо для вашего getDF:

def getDF(dic, gender, year):
  return dic[gender][year]

print genDF(dic, 'male', 2014)
71
ответ дан zhangxaochen 21 August 2018 в 08:38
поделиться
  • 1
    отличный ответ zhangxaochen - не могли бы вы отредактировать свой ответ, чтобы показать внизу, как вы можете сделать цикл for, который создает dataframes (с данными года и пола), но добавляет их в словарь, чтобы к ним можно было получить доступ позже с помощью метода getDF? def GetDF (dict, key): return dict [key] – yoshiserry 28 February 2014 в 07:11
  • 2
    @yoshiserry, что key, как в вашем getDF? один параметр или кортеж ключей? быть конкретным plz;) – zhangxaochen 28 February 2014 в 07:21
  • 3
    hi это единственный ключ, просто слово, которое будет соответствовать полу (мужчина или женщина) или год (13, 14). Не знал, что у вас может быть кортеж ключей. Не могли бы вы поделиться примером того, когда и как вы это сделаете? – yoshiserry 28 February 2014 в 07:24
  • 4
    не могли бы вы взглянуть на этот вопрос тоже. Я чувствую, что ты можешь ответить на него. Снова связано с кадрами данных pandas. [Д0] stackoverflow.com/questions/22086619/… – yoshiserry 28 February 2014 в 07:26
  • 5
    Обратите внимание, что Gender и Year должны быть строками, т. Е. 'Gender' и 'Year'. – Steven C. Howell 4 May 2017 в 19:47

Для более общих логических функций, которые вы хотели бы использовать в качестве фильтра и которые зависят от более чем одного столбца, вы можете использовать:

df = df[df[['col_1','col_2']].apply(lambda x: f(*x), axis=1)]

, где f - это функция, применяемая к каждому пара элементов (x1, x2) из ​​col_1 и col_2 и возвращает True или False в зависимости от любого условия, в котором вы хотите (x1, x2).

17
ответ дан guibor 21 August 2018 в 08:38
поделиться
Другие вопросы по тегам:

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