繁体   English   中英

熊猫:在数据框中连接两列(不创建两列)

[英]Pandas: Join two columns in dataframe (without creating two)

我有以下数据:

    Col1 Col2 Col3 Col4
     A    G     K
     B          L   Q
     C    H     M
     D          N   R
     E    I     O   
     F    J     P

这就是我想要的:

    Col1 NEW  Col3 
     A    G     K
     B    Q     L   
     C    H     M
     D    R     N   
     E    I     O   
     F    J     P

我尝试使用以下解决方案 ,并且按照我需要的方式进行了工作。 最终发生的是,我将拥有数据框A,然后具有数据框B。B将包含我的新列,而A将保持不变。

我曾尝试使用.replace()和.fillna(),但我似乎无法正确理解语法。 由于某些原因,当我尝试执行以下操作时:

      csv[Col2] = csv.replace(to_replace=" ", value=csv[Col4]])

我最终将Col4的全部内容覆盖了Col2(包括空白)。 这似乎发生在.replace()和.fillna()上。

我不确定是否有帮助,但是在这些情况下,Col2只会丢失Col4拥有数据的数据。 有任何想法吗?

谢谢大家回答。 我现在意识到由于语法错误,我一直在追尾。 这是我尝试过的另一行代码,但无法正常工作。 我遇到了“一个列覆盖另一个”的问题(请参见上文)。

    csv[Col2] = csv.fillna(csv[Col4]])

但是,在重新访问该页面之后,约翰·加尔特(John Galt)链接到下面,我感到自己好像丢失了一些东西。

    csv[Col2] = csv[Col2].fillna(csv[Col4]])

这工作得很好。 而且,我觉得更加关注可能可以更快地解决这个问题。 谢谢大家的耐心!

更新一

我会附加有关数据框的更多信息,以防将来对任何人有帮助。

    <class 'pandas.core.frame.DataFrame'>
    Int64Index: 50000 entries, 0 to 49999
    Data columns (total 6 columns):
    Col 1                      50000 non-null object
    Col 2                      4652 non-null object
    Col 3                      50000 non-null object
    Col 4                      45347 non-null object
    Col 5                      50000 non-null object
    Col 6                      50000 non-null object
    dtypes: object(6)
    memory usage: 1.5+ MB
    None

为了避免创建任何新的临时变量或数据帧,您可以将“ Col2”替换为新值,然后删除“ Col4”。 有几种方法可以做到这一点。

Numpy where()是一个很好的通用解决方案,可以处理'' (空或空白), ' ' (空格)或nan

df['Col2'] = np.where( df.Col2 == ' ',   df.Col4, df.Col2 )  # space

df['Col2'] = np.where( df.Col2.isnull(), df.Col4, df.Col2 )  # blank or nan 

@EdChum的答案也应该有效,并且fillna()可能是最简单的(如@JohnGalt的链接中所示),但如果那里有空格,则将无效。

df['Col2'] = df['Col2'].fillna(df.Col4)

之后,只需删除“ Col4”

df = df.drop('Col4',axis=1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM