Проверьте наличие многократных дубликатов в Pandas Dataframe [дубликат]

Любой набор переменных также может быть завершен в классе. Переменные «Variable» могут быть добавлены к экземпляру класса во время выполнения, напрямую обращаясь к встроенному словарю через атрибут __dict__.

Следующий код определяет класс Variables, который добавляет переменные (в этом случае атрибуты) к своему экземпляру во время построения. Имена переменных берутся из указанного списка (который, например, мог быть сгенерирован программным кодом):

# some list of variable names
L = ['a', 'b', 'c']

class Variables:
    def __init__(self, L):
        for item in L:
            self.__dict__[item] = 100

v = Variables(L)
print(v.a, v.b, v.c)
#will produce 100 100 100
10
задан pyan 18 June 2015 в 18:45
поделиться

4 ответа

Параметр thresh для dropna , вам просто нужно передать длину вашего df - количество желаемых значений NaN в качестве вашего порога:

In [13]:

dff.dropna(thresh=len(dff) - 2, axis=1)
Out[13]:
          A         B
0  0.517199 -0.806304
1 -0.643074  0.229602
2  0.656728  0.535155
3       NaN -0.162345
4 -0.309663 -0.783539
5  1.244725 -0.274514
6 -0.254232       NaN
7 -1.242430  0.228660
8 -0.311874 -0.448886
9 -0.984453 -0.755416

Таким образом, приведенное выше приведет к потере любого столбца, который не соответствует критериям длины df (количество строк) - 2 как число значений, отличных от Na.

21
ответ дан EdChum 17 August 2018 в 19:54
поделиться
  • 1
    Благодарю. Опечатка в коде len(df) должна быть len(dff) – pyan 19 June 2015 в 12:09
  • 2
    Исправлено сейчас, хорошее место – EdChum 19 June 2015 в 12:11
  • 3
    Вы знаете, возможно ли применить thresh, за исключением подмножества определенных столбцов? Спасибо. – pceccon 19 September 2017 в 12:19
  • 4
    @pceccon извините, но я, как правило, не отвечаю на вопросы в комментариях, поскольку у него нет ясности, вы можете подмножать столбцы, передавая список, так что IIUC вы можете сделать что-то вроде df[col_name_list].fillna(...), чтобы применить только thresh к этому подмножеству и применить к другим столбцам df[df.columns.difference(col_name_list)].filna(....) – EdChum 20 September 2017 в 07:32

Вы можете использовать понимание условного списка:

>>> dff[[c for c in dff if dff[c].isnull().sum() < 2]]
          A         B
0 -0.819004  0.919190
1  0.922164  0.088111
2  0.188150  0.847099
3       NaN -0.053563
4  1.327250 -0.376076
5  3.724980  0.292757
6 -0.319342       NaN
7 -1.051529  0.389843
8 -0.805542 -0.018347
9 -0.816261 -1.627026
3
ответ дан Alexander 17 August 2018 в 19:54
поделиться

Я рекомендую drop -метод. Это альтернативное решение:

dff.drop(dff.loc[:,len(dff) - dff.isnull().sum() <2], axis=1)
0
ответ дан Axel 17 August 2018 в 19:54
поделиться

Вот возможное решение:

s = dff.isnull().apply(sum, axis=0) # count the number of nan in each column
print s
   A    1 
   B    1
   C    3
   dtype: int64

for col in dff: 
   if s[col] >= 2:  
       del dff[col]

Или

for c in dff:
    if sum(dff[c].isnull()) >= 2:
        dff.drop(c, axis=1, inplace=True)
0
ответ дан stellasia 17 August 2018 в 19:54
поделиться
Другие вопросы по тегам:

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