过滤和操作 Pandas 数据框中的"None"行或"Null"行



因此,如果列中的行为空,我正在尝试为该行分配一个新值。我试图检查是否有空行,然后写入操作语句,但它似乎不起作用。例如,如果 A 列等于"大",B 列等于"无",那么我希望 B 列中的该行等于"高"。如果列 B 已经有一个值,那么它很好。任何帮助将不胜感激!

示例数据帧:

Column A    Column B
Big         None
Big         Tall
Small       Short
Medium      None
Small       None
Medium      Average

我尝试过的代码:


df.loc[df['Column B'].isnull(), 'Column B'] = 'Fill' #used to fill in the "None Type" rows?
df['Column A'] = df['Column A'].astype(str)
for row in df.iterrows():
if df.loc[df['Column B'].str.contains('Fill'):
df.loc[df['Column A'].str.contains('Big'), 'Column B'] = 'Tall'
df.loc[df['Column A'].str.contains('Medium'), 'Column B'] = 'Average'
df.loc[df['Column A'].str.contains('Small'), 'Column B'] = 'Short'

但是,这将失败。只是尝试将"无"列 B 值替换为上面由 A 列值确定的相应值。

这样的东西可以解决问题

map = {'Big':'Tall','Medium':'Average','Small':'Short',}
def fill(data):
if data['Column B'] is None  :
data['Column B'] = map[data['Column A']]
return data
df.apply(fill,1)

如果您有一组所需的替换项,则可以使用pd.Series.replace创建要用作默认值的值列。然后,您可以使用pd.Series.fillna填充 NaN 值,丢失数据的对齐和首选备份会自动发生,因为它们都具有相同的索引。

在您的情况下:

replacements = {
'Big': 'Tall',
'Medium': 'Average',
'Small': 'Short',
}
backups = df['Column A'].replace(replacements)
df['Column B'] = df['Column B'].fillna(backups)

为此,您需要确保在尝试 fillna 操作之前,将 B 列中的所有缺失值编码为<NA>(或 pandas 1.0.0 之前的 NaN(。

在熊猫中>= 1.0.0:

df['Column B'] = df['Column B'].astype('string')

在 1.0.0 之前的 pandas 版本中:

df['Column B'] = df['Column B'].replace({'None': np.nan, None: np.nan})

有关详细信息,请参阅有关使用文本数据的文档(同一部分,pandas <= 1.0.0(

相关内容

  • 没有找到相关文章

最新更新