我试图写一个用户自定义函数,看到输入列的数据类型,并改变它。
我的输入数据类型将或者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。
我要去哪里错了,可我的代码更好的写法。
请帮助我。
我做了如下修改代码。
范围是从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)