Skip to main content
 首页 » 编程设计

python之按 dtype 为字符串和数字的条件删除列

2025年05月04日28Free-Thinker

我有以下数据(列数可能会有所不同):

    NAME    ID  POTENTIAL_VOTERS    VOTES   SPOILT_VOTES    LEGAL_VOTES אמת ג   ודעם    ז   ... נץ  ע   פה  ף   ףץ  קנ  קץ  רק  שס  voter_turnout 
0   תל אביב - יפו   5000    403338  263205  1860    261345  89567   2628    8488    9   ... 34  132 30241   105 124 2667    2906    209 10189   0.647955 
1   ירושלים 3000    385888  258879  3593    255286  24696   53948   3148    10  ... 54  215 10752   37  148 1619    18330   121 30579   0.661555 
2   חיפה    4000    243274  151318  1758    149560  37805   4894    12363   24  ... 16  103 16826   40  87  1596    1648    142 3342    0.614780 
3   ראשון לציון 8300    195958  138998  1188    137810  31492   924 86  8   ... 16  5   19953   26  68  1821    2258    121 4095    0.703263 
4   פתח תקווה   7900    177367  125633  1223    124410  22103   4810    85  8   ... 14  9   14661   15  65  1224    3227    74  6946    0.701427 
5   אשדוד   70  170193  115145  1942    113203  9694    11132   33  7   ... 14  10  8841    26  74  1322    4180    80  11923   0.665145 
6   נתניה   7400    168914  106738  1270    105468  14575   2921    65  5   ... 14  9   11035   40  63  1089    3177    103 8319    0.624389 

当我尝试按总和条件删除列时(总和小于 40000 我不需要此列),使用此代码:

df.drop([col for col, val in df.sum().iteritems() if val < 40000], axis=1, inplace=True) 

我收到以下错误:

TypeError: '<' not supported between instances of 'str' and 'int'

我假设这是因为某些列不是整数(因为有文本)。知道如何解决这个问题吗?

请您参考如下方法:

这里的问题是 sum 将连接所有字符串,您需要过滤 df 以仅选择数字数据类型,然后过滤它们:

In[27]: 
df = pd.DataFrame({'a': list('abcd'), 'b':np.random.randn(4), 'c':np.arange(4)}) 
df 
 
Out[27]:  
   a         b  c 
0  a -0.053771  0 
1  b  0.124416  1 
2  c -2.024073  2 
3  d -2.541324  3 

我们可以使用 select_dtypes 只选择数字类型并传递 np.number

In[28]: 
df1 = df.select_dtypes([np.number]) 
df1 
 
Out[28]:  
          b  c 
0 -0.053771  0 
1  0.124416  1 
2 -2.024073  2 
3 -2.541324  3 

现在我们可以过滤列了:

In[29]: 
df1.loc[:,df1.sum() > 1] 
 
Out[29]:  
   c 
0  0 
1  1 
2  2 
3  3 

您可以看到 sum 正在返回连接的字符串

In[30]: 
df.sum() 
 
Out[30]:  
a       abcd 
b   -4.49475 
c          6 
dtype: object