Как определить столбцы, которые содержат только кортежи в Pandas?

#python #pandas

#python #pandas

Вопрос:

Как я могу определить имя столбцов, которые содержат только кортежи в Pandas?

 import pandas as pd

df = pd.DataFrame({'I':[1,2,3,4], 'C':[80,160,240,80], "D":[[1,2], [1,2],[1,2], [1,2]],
               'F':[(1,2,3,4),(5,7,2),(9,6,2,5,7),(4,0,8,3,2)]})
df

    I   C       D       F 

0   1   80      [1, 2]  (1, 2, 3, 4)
 
1   2   160     [1, 2]  (5, 7, 2)

2   3   240     [1, 2]  (9, 6, 2, 5, 7)
 
3   4   80      [1, 2]  (4, 0, 8, 3, 2)

df.dtypes

I    int64 

C    int64 

D    object 

F    object 

dtype: object
  

Я подумал о поиске object типа данных. Но объекты, отличные от кортежей, могут привести к object типу данных.

Ответ №1:

Вы можете выполнить итерацию по столбцу F и проверить, все ли значения являются кортежами.

Если все значения являются кортежами, то результатом этого будет True, иначе False .

 print (all(isinstance(x,tuple) for x in df['F']))
  

Результатом этого будет

 True
  

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

 for i in df.columns:
    print ('column :',i, 'is a tuple : ', all(isinstance(x,tuple) for x in df[i]))
  

Результатом этого будет:

 column : I is a tuple :  False
column : C is a tuple :  False
column : D is a tuple :  False
column : F is a tuple :  True
  

Ответ №2:

Вы должны быть в состоянии проверить это с помощью isinstance

 isinstance(df.F[0],tuple)

# True
  

Если вы хотите проверить все значения в столбце, вам нужно выполнить цикл:

 for i in df.F:
    print(isinstance(i,tuple))

#True
#True
#True
#True
  

Ответ №3:

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

 for i in df.keys():
    if(isinstance(df[i][0], tuple)): # true when tuple encountered
        print(i)