Python的 - 一个UDF更改数据类型和替换熊猫数据框的值

问题描述 投票:0回答:1

我试图写一个用户自定义函数,看到输入列的数据类型,并改变它。

我的输入数据类型将或者Int64类型,float64,对象,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。

我要去哪里错了,可我的代码更好的写法。

请帮助我。

python pandas
1个回答
0
投票

我做了如下修改代码。

范围是从1开始,我把它从0开始

我删除了多个if的,并使其作为一个单一的逻辑是否

再次更换后,我重新设置数据类型,只是为了确保“熊猫并没有设置回”。

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)
© www.soinside.com 2019 - 2024. All rights reserved.