Python一些可能用的到的函数系列102 推断df的变量类型

本文介绍了一种基于Python Pandas库的SQL表结构推断方法,该方法通过遍历DataFrame中的每一列并根据数据特性自动推断列的数据类型,包括整数、浮点数、日期及变长字符等,极大简化了创建SQL表的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说明

这个主要是为了在sql里快速建表

内容

对每列的变量进行遍历,去掉空之后进行简单的判定。数值(doublefloatdate)的数据长度是固定的,变化比较大的是字符型。我觉得可以采用最大最小的方式限定其极值。

函数

# 1 变量最终要推断为几种类型:int, float, varchar , datetime 
# 2 逻辑看,对每一列进行循环,丢掉空值分析。对这列尝试日期转换,然后尝试数值转换。
# 3 日期转换若成功,那么就是date。如果数值转化失败那么就是字符, 取最大长度的两倍和制定的max_len的最小值作为varchar长度
# 4 数值转化成功的,就判断是否有 「.」,如果有就是float,否则是int。
import pandas as pd 
def infer_df_cols2(some_data_frame, max_varchar_len = 1000 , min_varchar_len = 10, len_times = 2):
    cols = []
    cols_type = []
    for col in some_data_frame.columns:
        s = some_data_frame[col].dropna()
        if len(s) ==0:
            cols.append(col)
            cols_type.append('Missing')
            continue
        # 判日期
        try:
            pd.to_datetime(s)
            
            cols.append(col)
            cols_type.append('date')
        except:
            # 判数值
            try:
                s.apply(float)
                
                if '.' in str(s.iloc[0]):
                    cols.append(col)
                    cols_type.append('float')
                else:
                    cols.append(col)
                    cols_type.append('int(11)')
            except:
                max_len = len_times* s.apply(len).max()
                str_len = min(max_len, max_varchar_len)
                str_len = max(str_len, min_varchar_len)
                cols.append(col)
                cols_type.append('varchar(%s)' % str_len)
    return cols, cols_type

使用

test_input_df


main_type	sub_type	key_name	value	xdate
0	微服务 mservice	字符判定 char_validator	名字 name	例:AlphaSet000	2022-01-01
1	微服务 mservice	介绍 introduction	名字 name	例:online_ner24000	2022-01-01
2	微服务 mservice	字符判定 char_validator	b1	b2	2022-01-01
3	微服务 mservice	介绍 introduction	a1	a2	2022-01-01

infer_df_cols2(test_input_df)

(['main_type', 'sub_type', 'key_name', 'value', 'xdate'],
 ['varchar(28)', 'varchar(42)', 'varchar(18)', 'varchar(38)', 'date'])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值