Jos*_*der 1 python numpy pandas
我正在尝试fillna使用合适的变量为每列添加一个。我的目标是尝试在最高级别的通用性上找到列类型:基本上,目前它是 numeric (int/float)、string 或 pandas Timestamp。我知道我可以检测数值或使用字符串numpy.issubdtype和类型层次,但我还没有找到一种方法来检测Timestamp。我的解决方案使用iloc[0]and 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)
Run Code Online (Sandbox Code Playgroud)
(请注意,我不能使用,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
Run Code Online (Sandbox Code Playgroud)
一个例子。输入:
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)
Run Code Online (Sandbox Code Playgroud)
输出:
dates
0 2009-07-23
1 2011-07-07
2 1900-01-01
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2058 次 |
| 最近记录: |