使用iterrows后数据结构发生了变化

时间:2016-02-07 14:30:47

标签: python pandas

我正在尝试选择一行数据,将其与另一个数据帧合并,然后选择下一行,执行相同的操作。我相信我应该能够用pandas.iterrows做到这一点。

import pandas as pd
import numpy as np

one = {'A' : pd.Series([3, 4, 2]), 'B' : pd.Series(['one', 'two', 'one'])}
two = {'A' : pd.Series([1, 2, 3, 4, 5, 6])}

df1 = pd.DataFrame(one, columns = ['A', 'B'])
df2 = pd.DataFrame(two)

for index, row in df1.iterrows():
    row1 = pd.DataFrame(row)
    print(row1)

    df3 = pd.merge(df2, row1, on = 'A', how = 'left')
    print (df3)

当我打印(第1行)时,我得到:

     0
A    3
B  one
     1
A    4
B  two
     2
A    2
B  one

由于键错误导致连接失败,考虑到print(row1)的结构,这对我来说很有意义。

df3的预期结果是:

    A   B
0   1  Nan
1   2  Nan
2   3  one
3   4  Nan
4   5  Nan
5   6  Nan

    A   B
0   1  Nan
1   2  Nan
2   3  Nan
3   4  two
4   5  Nan
5   6  Nan

在我看来,列标签现在是索引。我想我需要重置索引,因此'A'和'B'将是我可以加入的值。有没有一种有效的方法来实现这一目标?

1 个答案:

答案 0 :(得分:1)

您可以尝试添加T

row1 = pd.DataFrame(row)

row1 = pd.DataFrame(row).T
   A    B
0  1  NaN
1  2  NaN
2  3  one
3  4  NaN
4  5  NaN
5  6  NaN
   A    B
0  1  NaN
1  2  NaN
2  3  NaN
3  4  two
4  5  NaN
5  6  NaN
   A    B
0  1  NaN
1  2  one
2  3  NaN
3  4  NaN
4  5  NaN
5  6  NaN