pandas添加行而不是列

Pav*_* M. 4 python append pandas

我是熊猫的新手,但试图简单地添加一行

class Security:
    def __init__(self):
        self.structure = ['timestamp', 'open', 'high', 'low', 'close', 'vol']
        self.df = pd.DataFrame(columns=self.structure)  # index =
    def whats_inside(self):
        return self.df
    """
    Some skipped code...
    """
    def add_data(self, timestamp, open, high, low, close, vol):
        data = [timestamp, open, high, low, close, vol]
        self.df = self.df.append (data)

sec = Security()
print sec.whats_inside()
sec.add_data ('2015/06/01', '1', '2', '0.5', '1', '100')
print sec.whats_inside()
Run Code Online (Sandbox Code Playgroud)

但输出是:

            0 close high  low open timestamp  vol
0  2015/06/01   NaN  NaN  NaN  NaN       NaN  NaN
1           1   NaN  NaN  NaN  NaN       NaN  NaN
2           2   NaN  NaN  NaN  NaN       NaN  NaN
3         0.5   NaN  NaN  NaN  NaN       NaN  NaN
4           1   NaN  NaN  NaN  NaN       NaN  NaN
5         100   NaN  NaN  NaN  NaN       NaN  NaN
Run Code Online (Sandbox Code Playgroud)

这意味着,我正在添加一列而不是一行.是的,我已经尝试谷歌,但仍然没有得到关键如何使它简单的pythonic方式.

ps我知道这很简单,但我只是缺少重要的东西.

Dee*_*ace 8

有几种方法可以添加新行.也许最简单的是(如果你想将行添加到最后)是使用loc:

df.loc[len(df)] = ['val_a', 'val_b', .... ]
Run Code Online (Sandbox Code Playgroud)

loc期待一个索引.len(df)将返回数据框中的行数,以便将新行添加到数据帧的末尾.

'['val_a','val_b',....]'是行的值列表,列的顺序相同,所以列表的长度必须等于列数,否则你会得到一个ValueError例外.例外情况是,如果您希望所有列具有相同的值,则允许您将该值作为列表中的单个元素df.loc[len(df)] = ['aa'].

注意:一个好主意是reset_index在使用此方法之前始终使用,因为如果您删除行或处理过滤的数据帧,则无法保证行的索引与行数同步.