数据准备:
df = pd.DataFrame({'C1': [1, 2, 3, 4], 'C2': ['A', np.NaN, 'C', 'D'], 'C3': ['V1', 'V2', 'V3', np.NaN]})
print(df.to_string())
'''
C1 C2 C3
0 1 A V1
1 2 NaN V2
2 3 C V3
3 4 D NaN
'''
我们知道,Pandas的dropna()
方法可以删除包含空值或全为空值的行或列,例如:
# 删除包含空值的行
df_dropna = df.dropna(how='any')
print(df_dropna.to_string())
'''
C1 C2 C3
0 1 A V1
2 3 C V3
'''
那么,如何按指定列的空值删除行而不影响其他有空值的列的空值所在的行?
# 删除指定列值为空的行,例如,删除C3列值为NaN的行
df.drop(df[df['C3'].isna()].index, inplace=True)
print(df.to_string())
'''
C1 C2 C3
0 1 A V1
1 2 NaN V2
2 3 C V3
'''
Pandas实现类似Hive的滑动窗口如下:
# 按某列滑动(前提:DataFrame已经按照某列(如日期列、这里的C1列)升序排序)
df['V3_last'] = df['C3'].shift(1)
print(df.to_string())
'''
C1 C2 C3 V3_last
0 1 A V1 None
1 2 NaN V2 V1
2 3 C V3 V2
'''
那么,滑动后,最前面的空值我们要想使用指定列的值填充应该怎么操作呢?
# 平移后,最前面的空值使用当前平移列(C3列)的值填充
df['V3_last_fillna'] = df['C3'].shift(1).fillna(df['C3'])
print(df.to_string())
'''
C1 C2 C3 V3_last V3_last_fillna
0 1 A V1 None V1
1 2 NaN V2 V1 V1
2 3 C V3 V2 V2
'''