熊猫:在数据框中加入两列(不创建两列)

时间:2015-04-23 20:59:37

标签: python csv pandas

我有以下数据:

    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

我尝试过使用following solution,它按照我需要的方式运行。最终发生的是我将拥有数据帧A然后是数据帧B.B将包含我的新列,A将保持不变。

II尝试使用.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

1 个答案:

答案 0 :(得分:2)

为避免创建任何新的临时变量或数据帧,您只需将“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)