将数据插入Pandas DataFrame而不需要索引或列开销(因此不能连接或追加)

时间:2014-04-08 20:20:29

标签: python insert pandas dataframe

考虑以下示例DataFrame:

In [227]: dfrm
Out[227]: 
          A         B         C  D           E
0  0.531428  0.045863  0.848619  1  2012-11-01
1  0.723965  0.508678  0.342828  2  2012-11-02
2  0.173907  0.962761  0.918959  2  2012-11-03
3  0.280061  0.067503  0.277317  1  2012-11-04
4  0.107908  0.949389  0.192078  1  2012-11-05
5  0.029907  0.240504  0.151579  1  2012-12-01
6  0.633516  0.217710  0.491811  2  2012-12-02
7  0.983545  0.450685  0.381446  1  2012-12-03
8  0.587426  0.833778  0.058891  2  2012-12-04
9  0.184342  0.664248  0.220923  1  2012-12-05

In [228]: dfrm.set_index(['E', 'D'])
Out[228]: 
                     A         B         C
E          D                              
2012-11-01 1  0.531428  0.045863  0.848619
2012-11-02 2  0.723965  0.508678  0.342828
2012-11-03 2  0.173907  0.962761  0.918959
2012-11-04 1  0.280061  0.067503  0.277317
2012-11-05 1  0.107908  0.949389  0.192078
2012-12-01 1  0.029907  0.240504  0.151579
2012-12-02 2  0.633516  0.217710  0.491811
2012-12-03 1  0.983545  0.450685  0.381446
2012-12-04 2  0.587426  0.833778  0.058891
2012-12-05 1  0.184342  0.664248  0.220923

In [229]: dfrm.set_index(['E', 'D']).A.unstack(level=1)
Out[229]: 
D                  1         2
E                             
2012-11-01  0.531428       NaN
2012-11-02       NaN  0.723965
2012-11-03       NaN  0.173907
2012-11-04  0.280061       NaN
2012-11-05  0.107908       NaN
2012-12-01  0.029907       NaN
2012-12-02       NaN  0.633516
2012-12-03  0.983545       NaN
2012-12-04       NaN  0.587426
2012-12-05  0.184342       NaN

现在,假设在最后一个示例中,我想用新行扩充DataFrame,这将是第一行。

我会为它编制一个索引值,比如说datetime.date(2012, 10, 30),这样它就会略微超出现有的第一行。我将只传递两个值的列表,例如[0.0, 0.0]作为第一行的值。

如何将此结构附加到DataFrame 的顶部,而不构建具有相同列/索引命名的临时结构。

我在输出中寻找的是:

D                  1         2
E           
2012-10-30  0.000000  0.000000          
2012-11-01  0.531428       NaN
2012-11-02       NaN  0.723965
2012-11-03       NaN  0.173907
2012-11-04  0.280061       NaN
2012-11-05  0.107908       NaN
2012-12-01  0.029907       NaN
2012-12-02       NaN  0.633516
2012-12-03  0.983545       NaN
2012-12-04       NaN  0.587426
2012-12-05  0.184342       NaN

没有必须手动创建这样的临时结构:

pandas.DataFrame({"E":[datetime.date(2012, 10, 30)], 
                    1:[0.0], 
                    2:[0.0]).set_index("E")

(并使用列索引的名称“D”进行讨论)然后使用pandas.concatDataFrame.append)。

我正在寻找只是“插入”任何数据的东西 - 只要求值的元组具有正确的形状以具有索引值和每个列的值,然后它只是推动将数据定位到这些列中。

在很多搜索中,我在pandas中找不到这个功能。

假设它被称为insert_row我正在寻找某种类型的界面:

data_frame.insert_row((datetime.date(2012, 10, 30), 0.0, 0.0))

我可以通过索引重新排序以使其达到顶部,但主要的一点是我想提供一个形状正确的tuple,其中第一个元素将被假定为索引,其余假设位置列,不需要名称或索引结构。

1 个答案:

答案 0 :(得分:2)

使用DataFrame.ix[index] = row添加行。

import pandas as pd
df = pd.DataFrame({"A":[1,2,3], "B":[4,5,6]}, index=list("xyz"))
df.ix["t"] = [10, 20]

我认为它会复制整个数据,不要重复这样做。