Pandas基于另一列替换列中的一些空行

bf1o4zei  于 2023-04-19  发布在  其他
关注(0)|答案(1)|浏览(148)

我试图过滤一个列,只过滤空白行,然后只过滤另一个列具有特定值的列,这样我就可以从该列中提取前两个单词,并将其分配给空白行。
我的代码是:

df.loc[(df['ColA'].isnull()) & (df['ColB'].str.contains('fmv')), 'ColA'] = 
      df['ColB'].str.split()[:2]

这个命令执行时没有任何错误,但是当我检查df['ColA'].isnull().sum()时,它显示的数字和以前一样。
任何帮助都是感激!谢谢!

vbkedwbf

vbkedwbf1#

你的代码运行良好,除了你有一个错字:

df.loc[(df['ColA'].isnull()) & (df['ColB'].str.contains('fmv')), 'ColA'] = \
    df['ColB'].str.split().str[:2]  # you need str[:2] and not only [:2]

但是为什么它不起作用呢?可能是因为你的条件没有被填充在一起。我的意思是你可以有空值,但是对于这些行,没有'fmv'字符串。
示例:

>>> df
  ColA         ColB
0  NaN  abc def ghi  # <- ColA is null but ColB does not contains fmv
1  abc  abc def fmv  # <- ColB contains fmv but ColA is not null
2  NaN  abc def ghi  # <- ColA is null but ColB does not contains fmv

所以上面的代码工作,但没有任何变化。检查一下:

>>> sum(df['ColA'].isnull() & df['ColB'].str.contains('fmv')
0

如果结果为0,则df['ColA'].isnull()df['ColB'].str.contains('fmv')都不匹配。

相关问题