pandas的DataFrame中出现多数据类型的检查(一列中有多个类型)

在pandas中,如果需要查看column的类型,一般使用

df.dtypes

方法,它将返回每个列的数据类型,但是如果涉及到多个类型,该方法只能返回一个类型,比如

frame = pd.DataFrame({'Yes': [41, None, 'str', 70, 21.3], 'No': [131, 2, None, 1, 3]})
print(frame.dtypes)

输出为 

​​Yes     object
No     float64
dtype: object

可以看到,Yes被标注为object,No被标注为float。我们发现一列中只要包含字符串,会被标记为object类,而包含nan(空值),其他元素为int的列会被标注为float。

一般而言,一列中一般只包含一种数据类型。但实践中,有时dataFrame包含的表格可能出错,或者处于需要包含多种数据类型。如果我们想要观察dataFrame中的所有类型的分布情况,就需要自己动手啦~

我们写了一个简单的函数,输入的是dataFrame,输出俩列表。第一个列表是我们要的所有列包含的所有数据类型,按列进行统计;第二个列表包含所有含多个数据类型的列(不包括nan),输出的结构为

[(column名,{数据类型列表})]   和

[所有含多个数据类型的列(不包括nan)]

上代码(doge)

def check_df_types(frame) ->(list,list):

    assert len(frame.index) != 0  #要求df不为空
    report_list = []
    multiple_type_list = []
    null_df = frame.isnull().sum()

还是在函数内部,判断类型

    columns = frame.columns   

    for column in columns:
        type_dict = {'int':0, 'float':0, 'None':0, 'str':0, 'unkown':0}
        for item in frame[column]: #类型判断与计数

            if isinstance(item,int):
                type_dict['int'] = type_dict['int'] + 1
          
            elif item is None: # series是object的时候None是None,数字的None是float
                continue
            
            elif isinstance(item,float):   # df中None属于float.Python也是的,大概
                type_dict['float'] = type_dict['float'] + 1
              
            elif isinstance(item,str): # series中只要有,就是object
                type_dict['str'] = type_dict['str'] + 1
               
            else:
                type_dict['unkown'] = type_dict['unkown'] + 1

由于nan是算float的,数据类型为float要在float里面减掉nan,数据类型是object的话 ,由于nan被记成float,要加上去(doge)

        nan_count = null_df[column]
        type_dict['None'] = type_dict['None'] + nan_count

        if str(frame[column].dtype) == 'float64': # 可能出问题,但int里面有None会转成float
            type_dict['float'] = type_dict['float'] - nan_count

        report_list.append((column,type_dict))       

        count = 0
        for key in type_dict:
            if type_dict[key] != 0 and key != 'None':
                count += 1

        if count > 1:
            multiple_type_list.append(column)          
        print(column + ' is: ' +str(type_dict))  

    return  report_list, multiple_type_list

最后调用函数,over~

l,l2 = check_df_types(frame)
print(l2)

结果正是我们想要的,拿到了一列中所有的数据类型,打印了含多种数据类型的有潜在异常的列。

对比一下

frame = pd.DataFrame({'Yes': [41, None, 'str', 70, 21.3], 'No': [131, 2, None, 1, 3]})
print(frame.dtypes)

 可以看到,No那一列虽然是int,但里面有nan,数据类型在创建的时候就已经被pandas被改成float了,虽然我们遍历了整个dataFrame,但这个int没有被catch到(doge),如果要求不高就...这样吧。

申明:虽然我挺菜的,但代码是我自己写的,加引用哈~,喜欢的话点个免费的赞吧(白嫖怪震怒)

----------------------------------------分隔线---------------------------------------------

对于之前的问题,我们有一个解决方法:不分int和float,叫它num就完事了(doge)

加一行代码,由于我懒得改函数了,就加在外面吧

for d in l:
    d = d[1]
    d['num'] = d['int'] + d['float']
    del d['int']
    del d['float']
    print(d)

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 可以使用Pandas的函数进行处理,比如可以使用.apply()函数,该函数可以用来对DataFrame的每一个元素应用一个函数;也可以使用.map()函数,该函数可以将某个列的每一个元素映射到另一个值;还可以使用.replace()函数,该函数可以将某个列的某个值替换为另一个值。 ### 回答2: pandas是一个基于Python的数据分析工具,可以方便地对数据进行处理和分析。当需要对dataFrame的某一个列进行处理时,可以使用pandas提供的一些方法。 首先,我们可以使用dataFrame的列名来引用某一列。例如,我们有一个dataFrame名为df,其包含列名为col的列。我们可以使用df['col']来引用该列数据。 接下来,我们可以使用pandas提供的方法对列数据进行处理。以下是一些常用方法: 1. head():返回某个列的前几行数据。可以使用df['col'].head(n)来获取该列的前n行数据。 2. unique():返回某个列的唯一值。可以使用df['col'].unique()来获取该列的所有唯一值。 3. value_counts():返回某个列各个值出现的次数。可以使用df['col'].value_counts()来获取该列各个值的出现次数。 4. map():对某个列的每个元素进行映射操作。可以使用df['col'].map(func)来对该列的每个元素进行func函数的映射操作。 5. apply():对某个列的每个元素进行自定义的函数操作。可以使用df['col'].apply(func)来对该列的每个元素进行func函数的操作。 6. fillna():对某个列的缺失值进行填充。可以使用df['col'].fillna(value)来将该列的缺失值填充为value。 7. dropna():删除某个列包含缺失值的行。可以使用df.dropna(subset=['col'])来删除该列包含缺失值的行。 以上是pandasdataFrame某一个列的数据进行处理的常用方法。通过使用这些方法,可以方便地对列数据进行操作和分析。 ### 回答3: PandasDataFrame某一个列的数据进行处理的方法有很多种,下面我列举了几种常用的方法: 1. 使用apply()函数:apply()函数可以将一个自定义的函数应用到某一个列的每一个元素上。例如,假设我们要将某一列的数据进行平方处理,可以定义一个平方函数,然后使用apply()函数将该函数应用到该列上。 ```python def square(x): return x ** 2 df['column_name'] = df['column_name'].apply(square) ``` 2. 使用pandas内置函数:Pandas提供了很多内置的函数,例如对某一列的数据进行求和、求平均值、计数等操作。可以直接使用这些函数来进行数据处理。 ```python df['column_name'] = df['column_name'].sum() df['column_name'] = df['column_name'].mean() df['column_name'] = df['column_name'].count() ``` 3. 使用lambda表达式:lambda表达式是一种简洁的定义函数的方式,可以在apply()函数使用lambda表达式对某一列的数据进行处理。 ```python df['column_name'] = df['column_name'].apply(lambda x: x ** 2) ``` 4. 使用其他pandas函数:除了上述方法,Pandas还提供了很多其他的函数来对某一列的数据进行处理,例如map()函数、str模块的函数(用于文本处理)、astype()函数(用于改变数据类型)等。 总结起来,PandasDataFrame某一个列的数据进行处理的方法有很多种,可以根据具体需求选择合适的方法来处理数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值