![](/img/trans.png)
[英]Replace missing values in time series data with python (pandas dataframe)
[英]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.