gpt4 book ai didi

python - 测试 Pandas 列是否为 datetime 类型

转载 作者:太空宇宙 更新时间:2023-11-04 11:15:10 24 4
gpt4 key购买 nike

我正在尝试使用合适的变量fillna 每列。我的目标是尝试找到最高通用级别的列类型:基本上,目前它是数字(int/float)、字符串或 pandas Timestamp。我知道我可以使用 numpy.issubdtypetype hierarchy 检测数字或字符串,但我还没有找到检测 Timestamp 的方法。我的解决方案使用 iloc[0]isinstance,但是还有更好的吗?这是我的代码,大致如下:

for col in df:
if np.issubdtype(dataframe[col].dtype, np.number):
df[col] = df[col].fillna(-1)
elif isinstance(dataframe[col].iloc[0], pd.datetime):
df[col] = df[col].fillna(pd.to_datetime('1900-01-01'))
else:
df[col] = df[col].fillna('NaN')
return (dataframe.fillna(na_var)

(请注意,我不能使用 df.loc[0, col],因为我的索引并不总是包含 0。)

最佳答案

对我来说,np.issubdtype(df[col].dtype, np.datetime64) 做你想做的事。

所以把所有的东西放在一起,我们有:

def df_fillna(df):
for col in df:
if np.issubdtype(df[col].dtype, np.number):
df[col] = df[col].fillna(-1)
elif np.issubdtype(df[col].dtype, np.datetime64):
df[col] = df[col].fillna(pd.to_datetime('1900-01-01'))
else:
df[col] = df[col].fillna('NaN')
return df

一个例子。输入:

df_test = pd.DataFrame()
df_test['dates'] = [pd.to_datetime("2009-7-23"), pd.to_datetime("2011-7-7"), pd.NaT]
df_test = df_fillna(df_test)

输出:

       dates
0 2009-07-23
1 2011-07-07
2 1900-01-01

关于python - 测试 Pandas 列是否为 datetime 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57196577/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com