pandas 如何让熊猫的“更新”功能覆盖一列中的数字而不是另一列中的数字?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/20108880/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-13 21:22:21  来源:igfitidea点击:

How do I get panda's "update" function to overwrite numbers in one column but not another?

pythonpython-2.7pandas

提问by Ryflex

Currently, I'm using:

目前,我正在使用:

csvdata.update(data, overwrite=True)

How can I make it update and overwrite a specific column but not another, small but simple question, is there a simple answer?

我怎样才能让它更新和覆盖一个特定的列,而不是另一个,小而简单的问题,有一个简单的答案吗?

回答by Andy Hayden

Rather than update with the entire DataFrame, just update with the subDataFrame of columns which you are interested in. For example:

无需更新整个 DataFrame,只需更新您感兴趣的列的 subDataFrame。例如:

In [11]: df1
Out[11]: 
   A   B
0  1  99
1  3  99
2  5   6

In [12]: df2
Out[12]: 
   A  B
0  a  2
1  b  4
2  c  6

In [13]: df1.update(df2[['B']])  # subset of cols = ['B']

In [14]: df1
Out[14]: 
   A  B
0  1  2
1  3  4
2  5  6

回答by Noah

If you want to do it for a single column:

如果您想为单列执行此操作:

import pandas
import numpy
csvdata = pandas.DataFrame({"a":range(12), "b":range(12)})
other = pandas.Series(list("abcdefghijk")+[numpy.nan])

csvdata["a"].update(other)

print csvdata

     a   b
0    a   0
1    b   1
2    c   2
3    d   3
4    e   4
5    f   5
6    g   6
7    h   7
8    i   8
9    j   9
10   k  10
11  11  11

or, as long as the column names match, you can do this:

或者,只要列名匹配,您就可以这样做:

other = pandas.DataFrame({"a":list("abcdefghijk")+[numpy.nan], "b":list("abcdefghijk")+[numpy.nan]})
csvdata.update(other["a"])