繁体   English   中英

Python-用于更改数据类型和替换Pandas DataFrame值的UDF

[英]Python - An UDF to change the data types and replace values of a Pandas DataFrame

我正在尝试编写一个用户定义的函数,该函数可以查看输入列的数据类型并对其进行更改。

我的输入数据类型将为int64,float64,object,datetimens [64]。

如果它是一个datetimens [64],那么我将空白日期替换为另一个自定义日期。 输出数据类型也将为datetimens [64]

如果它是int64,float64或对象。 我用“ FILLINGTHENAS”(字符串)替换空格,并将所有这些数据类型转换为对象。

def Change_Data_Type_DataFrame (AnyPandasDataFrame):
    cr_date = datetime(1800,1,1,1,1,1)        
    for i in range(1, AnyPandasDataFrame.shape[1]):
        Required_Column_Name = (AnyPandasDataFrame.columns[i])
        Required_Data_Type = AnyPandasDataFrame[Required_Column_Name].dtype                                       
        if Required_Data_Type == 'datetime64[ns]':
            DateChecker = True
        else:
            DateChecker = contains_word(Required_Column_Name, "Date","of Death","Day of Work") 
        if DateChecker == False :
            if Required_Data_Type == 'int64':
                print("Yes")
                AnyPandasDataFrame[Required_Column_Name] = AnyPandasDataFrame[Required_Column_Name].fillna("FILLINGTHENAS")
                AnyPandasDataFrame[Required_Column_Name] = AnyPandasDataFrame[Required_Column_Name].astype(str)
                AnyPandasDataFrame[Required_Column_Name] = AnyPandasDataFrame[Required_Column_Name].astype(str).replace('\.0', '', regex=True)
            if Required_Data_Type == object:
                AnyPandasDataFrame[Required_Column_Name] = AnyPandasDataFrame[Required_Column_Name].fillna("FILLINGTHENAS")
                AnyPandasDataFrame[Required_Column_Name] = AnyPandasDataFrame[Required_Column_Name].astype(str)
                AnyPandasDataFrame[Required_Column_Name] = AnyPandasDataFrame[Required_Column_Name].astype(str).replace('\.0', '', regex=True)
            if Required_Data_Type == 'float64':
                    AnyPandasDataFrame[Required_Column_Name] = AnyPandasDataFrame[Required_Column_Name].fillna("FILLINGTHENAS")
                    AnyPandasDataFrame[Required_Column_Name] = AnyPandasDataFrame[Required_Column_Name].astype(str)
                    AnyPandasDataFrame[Required_Column_Name] = AnyPandasDataFrame[Required_Column_Name].astype(str).replace('\.0', '', regex=True)         
        else:
            AnyPandasDataFrame[Required_Column_Name] = AnyPandasDataFrame[Required_Column_Name].fillna(cr_date)
            AnyPandasDataFrame[Required_Column_Name] = AnyPandasDataFrame[Required_Column_Name].astype('datetime64[ns]')  
    return (AnyPandasDataFrame)

我有一个巨大的100列数据框,并且我的函数失败了,因为我在输出数据框中看到了int64。

打印-是不起作用,但是我的df当然具有int64 dtypes。

我要去哪里错了,我的代码可以更好地编写吗?

请帮助我。

我对代码进行了以下更改。

范围从1开始,我从0开始

我删除了多个if,并将其作为一个if逻辑

再次替换后,我重新设置了数据类型,以确保“ Pandas没有将其重新设置”。

def Change_Data_Type_DataFrame (AnyPandasDataFrame):

cr_date = datetime(1800,1,1,1,1,1)        
for i in range(0, AnyPandasDataFrame.shape[1]):
    Required_Column_Name = (AnyPandasDataFrame.columns[i])
    print(Required_Column_Name)
    Required_Data_Type = AnyPandasDataFrame[Required_Column_Name].dtype                                       
    if Required_Data_Type == 'datetime64[ns]':
        DateChecker = True
    else:
        DateChecker = contains_word(Required_Column_Name, "Date","of Death","Day of Work") 
    if DateChecker == False :
            AnyPandasDataFrame[Required_Column_Name] = AnyPandasDataFrame[Required_Column_Name].fillna("FILLINGTHENAS")
            AnyPandasDataFrame[Required_Column_Name] = AnyPandasDataFrame[Required_Column_Name].astype(str).replace('\.0', '', regex=True)
            AnyPandasDataFrame[Required_Column_Name] = AnyPandasDataFrame[Required_Column_Name].astype(str)
    else:
        AnyPandasDataFrame[Required_Column_Name] = AnyPandasDataFrame[Required_Column_Name].fillna(cr_date)
        AnyPandasDataFrame[Required_Column_Name] = AnyPandasDataFrame[Required_Column_Name].astype('datetime64[ns]')  
return (AnyPandasDataFrame)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM