pandas:查找并附加到特定列中的第一个空单元格

时间:2017-11-11 12:06:50

标签: pandas dataframe

我有以下excel文件。

1  |  A  |    B   |   C   |
---------------------------
2 | apple| banana | tomato|
---------------------------
3 |   3  |    4   |    4  |
---------------------------
4 |   9  |    7   |    3  |
---------------------------
5 |      |    2   |    1  |
---------------------------
6 |      |    8   |       |
---------------------------
7 |      |        |       |
---------------------------

我使用 openpyxl 来阅读excel文件并转换为 pandas dataframe 。 问题是,我必须遍历数据并附加到特定列的最后一行。

例如,

First data to append:   4 apple, 2 banana  
Second data to append:  3 apple
Third data to append:   3 apple, 2 banana, 5 tomato

在读取第一个数据后,数据框应如下所示:

1  |  A  |    B   |   C   |
---------------------------
2 | apple| banana | tomato|
---------------------------
3 |   3  |    4   |    4  |
---------------------------
4 |   9  |    7   |    3  |
---------------------------
5 |  *4  |    2   |    1  |
---------------------------
6 |      |    8   |       |
---------------------------
7 |      |   *2   |       |
---------------------------

读取第二个数据后,数据框应如下所示:

1  |  A  |    B   |   C   |
---------------------------
2 | apple| banana | tomato|
---------------------------
3 |   3  |    4   |    4  |
---------------------------
4 |   9  |    7   |    3  |
---------------------------
5 |   4  |    2   |    1  |
---------------------------
6 |  *3  |    8   |       |
---------------------------
7 |      |    2   |       |
---------------------------

在读取第三个数据后,数据框应如下所示:

1  |  A  |    B   |   C   |
---------------------------
2 | apple| banana | tomato|
---------------------------
3 |   3  |    4   |    4  |
---------------------------
4 |   9  |    7   |    3  |
---------------------------
5 |   4  |    2   |    1  |
---------------------------
6 |   3  |    8   |   *5  |
---------------------------
7 |  *3  |    2   |       |
---------------------------
8 |      |   *2   |       |
---------------------------

有没有办法将新数据附加到特定列的第一个空单元格?感谢。

1 个答案:

答案 0 :(得分:0)

我能为你做的最好的

d = defaultdict(list)

d['apple'] = [3, 9]
d['banana'] = [4, 7, 2, 8]
d['tomato'] = [4, 3, 1]

list_to_append = [
    dict(apple=4, banana=2),
    dict(apple=3),
    dict(apple=3, banana=2, tomato=5)
]

for a in list_to_append:
    for k, v in a.items():
        d[k].append(v)

pd.DataFrame.from_dict(d, orient='index').T

   apple  banana  tomato
0    3.0     4.0     4.0
1    9.0     7.0     3.0
2    4.0     2.0     1.0
3    3.0     8.0     5.0
4    3.0     2.0     NaN
5    NaN     2.0     NaN