Python 使用Pandas从不同的表添加属性

Python 使用Pandas从不同的表添加属性,python,pandas,dataframe,nan,concat,Python,Pandas,Dataframe,Nan,Concat,我用熊猫来加工桌子 [table1] sample1 sample2 sample3 A 11 22 33 B 1 2 3 [table2] sample3 sample4 sample2 D 333 444 222 [Result] sample1 sample2 sample3 A 11 22 33 B 1 2 3 D NaN 222 333 我有两个表,

我用熊猫来加工桌子

[table1]
  sample1 sample2 sample3
A 11      22      33
B 1       2       3

[table2]
  sample3 sample4 sample2
D 333     444     222

[Result]
  sample1 sample2 sample3
A 11      22      33
B 1       2       3
D NaN     222     333
我有两个表,考虑到列名,我想在表1中添加行
D
(表2)。如果表1中的列存在于表2中,则将相应的
D
值添加到表1中,就像样本2和样本3一样。如果表2中的列与示例1不同,则D的值设置为
NaN
或忽略

有什么简单的方法可以对熊猫进行此操作吗?

我认为您可以通过以下方式使用并删除列
sample4

您可以使用来选择
数据帧
中的列,然后通过以下列选择
表2
的子集:

print (table2.columns.intersection(table1.columns))
Index(['sample2', 'sample3'], dtype='object')

print (pd.concat([table1,table2[table2.columns.intersection(table1.columns)]]))
   sample1  sample2  sample3
A     11.0       22       33
B      1.0        2        3
D      NaN      222      333
然后,如果需要使用
NaN
删除行,请使用:


通过首先从
table1
中的
table2
中选择子列,可以概括jezrael的。这是相当整洁地完成使用。这也避免了使用两个数据帧中的列形成潜在的巨大临时数据帧。例如:

import numpy as np
import pandas as pd

table1 = pd.DataFrame([[11, 22, 33], [1, 2, 3]], index=list('AB'), columns=['sample1', 'sample2', 'sample3'])
table2 = pd.DataFrame([[333, 444, 222]], index=['D'], columns=['sample3', 'sample4', 'sample2'])

# Sub-select columns...
cols_in_table1 = table2.columns[np.in1d(table2.columns, table1.columns)]

# ... and concatenate.
results = pd.concat((table1, table2[cols_in_table1]))

print(results)
其中打印:

   sample1  sample2  sample3
A     11.0       22       33
B      1.0        2        3
D      NaN      222      333

我认为我需要在列中查找值,但concat更简单,也更直观。谢谢你的回答。很高兴能帮助你!这对于亚柱选择非常有用。感谢您对INAD函数的评论。
import numpy as np
import pandas as pd

table1 = pd.DataFrame([[11, 22, 33], [1, 2, 3]], index=list('AB'), columns=['sample1', 'sample2', 'sample3'])
table2 = pd.DataFrame([[333, 444, 222]], index=['D'], columns=['sample3', 'sample4', 'sample2'])

# Sub-select columns...
cols_in_table1 = table2.columns[np.in1d(table2.columns, table1.columns)]

# ... and concatenate.
results = pd.concat((table1, table2[cols_in_table1]))

print(results)
   sample1  sample2  sample3
A     11.0       22       33
B      1.0        2        3
D      NaN      222      333