在Python/pandas中连接两个分隔的列表列,可能为null

2024-04-18 22:33:44 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我的问题是:

  • 我有一个数据帧,它有两列col1,col2,其中包含以“;”分隔的列表。每列中的某些值为空。你知道吗
  • 我想将它们合并到一个新列中的单个列表col3
  • 但是,对于null值,我只希望新字段包含现有notnull字段的值。你知道吗

在SQL中,我可以通过以下方法来实现:

  SELECT  
  CASE 
  WHEN col1 is not null and col2 is not null THEN col1+';'+col2 
  WHEN col1 is not null and col2 is null THEN col_a
  WHEN col1 is null and col2 is not null THEN col_b end as col3
  FROM TBL

使用python最好的方法是什么?基于类似的问题,我尝试了几种不同的方法,但我总是会出错。你知道吗

df = pd.DataFrame({
        'col1': ['a;b;c;', 'd;e', np.nan, np.nan, 'g'],
        'col2': ['a' , np.nan , 'b;c', np.nan , np.nan]
     })

df.loc[ ( df['col1'].notnull & df['col2'].notnull) , 'col3'] = df['col1'].fillna('') +';'+ df['col2'].fillna('')


TypeError                                 Traceback (most recent call last)
<ipython-input-32-89fd68e80fd1> in <module>
----> 1 df.loc[ (df['col1'].notnull & df['col2'].notnull) , 'col3'] = df['col1'].fillna('') +';'+ df['col2'].fillna('')

TypeError: unsupported operand type(s) for &: 'method' and 'method'

Tags: and方法dfisnpnotnannull
2条回答

应用关于我使用的缺失()的注释

df.loc[ ( df['col1'].notnull() & df['col2'].notnull()) , 'col3'] = df['col1'].fillna('') +';'+ df['col2'].fillna('')
df.loc[ ( df['col1'].notnull() & df['col2'].isnull()) , 'col3'] = df['col1']
df.loc[ ( df['col1'].isnull() & df['col2'].notnull()) , 'col3'] = df['col2']

这让我明白了我的目的。 谢谢大家的帮助。你知道吗

您需要:

df['col3'] = df['col1'].fillna('')+df['col2'].fillna('')

    col1    col2    col3
0   a;b;c;  a       a;b;c;a
1   d;e              d;e
2           b;c      b;c
3           
4     g               g

相关问题 更多 >