如何连接两个各一行的数据帧而不生成 NaN

问题描述 投票:0回答:1

我有两个数据框:

import pandas as pd
import numpy as np

n=10

df = pd.DataFrame(
    {
        "A": 1.0,
        "B": pd.Timestamp("20130102"),
        "C": pd.Series(1, index=list(range(n)), dtype="float32"),
        "D": np.array([3] * n, dtype="int32"),
        "E": pd.Categorical(["test", "train"] * int(n/2)),
        "F": "foo",
    }
)

i_f = ['A', 'B']
o_f = ['C', 'D', 'E', 'F']
df1 = pd.DataFrame(data=df[i_f].values, columns=i_f).reset_index(drop=True)
df2 = pd.DataFrame(data=df[o_f].values, columns=o_f).reset_index(drop=True)

df1 和 df2 是具有相同行数和不同列数的数据帧。现在我想选择 df1 中的行 i,df2 中的行 j,并获取单行的单个数据帧,其中包含 df1 和 df2 中的列。我愿意:

i = 3
j = 2 
df_curr = pd.concat([df1.iloc[[i], :], df2.iloc[[j], :]], axis=1)

但是,我得到的是一个包含两行和 NaN 的数据框:

print(df_curr)
#      A          B    C    D     E    F
# 3  1.0 2013-01-02  NaN  NaN   NaN  NaN
# 2  NaN        NaT  1.0    3  test  foo

相反,我需要

       A          B    C    D     E    F
#    1.0 2013-01-02  1.0    3  test  foo

我怎样才能得到它?

python pandas dataframe concatenation
1个回答
0
投票

由于您想要单行,

concat
作为系列,然后重塑:

i = 3
j = 2 
df_curr = pd.concat([df1.iloc[i, :], df2.iloc[j, :]]).to_frame().T
© www.soinside.com 2019 - 2024. All rights reserved.