首页 > 解决方案 > 如何检查我的数据框每一列中的任何条目是否是数字?

问题描述

我对使用一个简单的代码印象深刻

考虑以下 DataFrame

import numpy as np
import pandas as pd
index =[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39]
dct =  {'Region': {0: 'Amma', 1: 'Amma', 2: 'Amma', 3: np.nan, 4: 'Amma', 5: 'Amma', 6: 'Amma', 7: '1', 8: 'Amma', 9: 'Amma', 10: 'Amma', 11: 'Amma', 12: 'Amma', 13: 'Amma', 14: 'Amma', 15: 'Amma', 16: 'Amma', 17: 'Amma', 18: 'Amma', 19: 'Amma', 20: 'Amma', 21: 'Amma', 22: 'Amma', 23: 'Amma', 24: 'Amma', 25: 'Amma', 26: 'Amma', 27: 'Amma', 28: 'Amma', 29: 'Amma', 30: 'Amma', 31: 'Amma', 32: 'Amma', 33: 'Amma', 34: 'Amma', 35: 'Amma', 36: 'Amma', 37: 'Amma', 38: 'Amma', 39: 'Amma'}, 'Urban/Rural residence': {0: 'Urba', 1: 'Urba', 2: 'Urba', 3: 'Urba', 4: 'Urba', 5: 'Urba', 6: 'Urba', 7: 'Urba', 8: 'Urba', 9: 'Urba', 10: 'Urba', 11: 'Urba', 12: 'Urba', 13: 'Urba', 14: 'Urba', 15: 'Urba', 16: 'Urba', 17: 'Urba', 18: 'Urba', 19: 'Urba', 20: 'Urba', 21: 'Urba', 22: 'Urba', 23: 'Rural', 24: 'Urba', 25: 'Urba', 26: 'Urba', 27: 'Urba', 28: 'Urba', 29: 'Urba', 30: 'Urba', 31: 'Urba', 32: 'Urba', 33: 'Urba', 34: '1.65', 35: 'Urba', 36: 'Urba', 37: 'Urba', 38: 'Urba', 39: 'Urba'}}
new_df = pd.DataFrame( dct, index=index )

现在我还必须将一些函数定义为

def solve(lis):                                        
    for x in lis:
        try:
            yield float(x)
        except ValueError:    
            pass

def CheckIfFloat(new_df):
    a=[]
    for i in new_df.columns:
        new_df1=new_df[new_df[i].isna()==0][i]
        A=list(solve(new_df1))
        if len(A)!=0:
            a.insert(len(a),i)
        return a

现在由于某种原因,这没有按预期工作,结果应该是两列。但这里它只给出第一列。

有没有更简单的方法来做到这一点?

标签: python-3.xpandas

解决方案


pandas.to_numeric与参数一起使用errors='coerce'并创建包含任何有效数字的任何列的列表理解。

number_cols = new_df.columns[[pd.to_numeric(new_df[col], errors='coerce').notna().any() for col in new_df]]

你可以通过索引

new_df[number_cols]

推荐阅读