熊猫,concat系列到DF作为行

时间:2014-01-08 19:39:09

标签: python pandas concat series

我尝试将系列添加到空数据框中,但无法找到答案 无论是在Doc还是其他问题。因为您可以按行追加两个DataFrame 或者按列,似乎系列中必须缺少“轴标记”。能够 任何人解释为什么这不起作用?。

import Pandas as pd
df1 = pd.DataFrame()
s1 = pd.Series(['a',5,6])
df1 = pd.concat([df1,s1],axis = 1)
#go run some process return s2, s3, sn ...
s2 = pd.Series(['b',8,9])
df1 = pd.concat([df1,s2],axis = 1)
s3 = pd.Series(['c',10,11])
df1 = pd.concat([df1,s3],axis = 1)
  

如果我上面的例子是一些误导,或许使用文档中的示例会有所帮助。

     

引用:将行追加到DataFrame   虽然不是特别有效(因为必须创建一个新对象),你可以附加一个   通过将一个Series或dict传递给append来单行到DataFrame,它返回一个新的DataFrame,如上所示。结束报价。

     

来自docs的示例附加“S”,它是来自DataFrame的一行,“S1”是一个系列   并尝试追加“S1”会产生错误。我的问题是为什么会附加“S1不工作?问题背后的假设是DataFrame必须编码或包含两个轴的轴信息,其中一个系列必须只包含一个轴的信息。

df = pd.DataFrame(np.random.randn(8, 4), columns=['A','B','C','D'])
s = df.xs(3); #third row of DataFrame
s1 = pd.Series([np.random.randn(4)]); #new Series of equal len
df= df.append(s, ignore_index=True)

结果

   0  1

0  a  b

1  5  8

2  6  9

所需

   0  1 2

0  a  5 6

1  b  8 9

2 个答案:

答案 0 :(得分:10)

你很亲密,只是改变了concat

的结果
In [14]: s1
Out[14]: 
0    a
1    5
2    6
dtype: object

In [15]: s2
Out[15]: 
0    b
1    8
2    9
dtype: object

In [16]: pd.concat([s1, s2], axis=1).T
Out[16]: 
   0  1  2
0  a  5  6
1  b  8  9

[2 rows x 3 columns]

您也无需创建空DataFrame

答案 1 :(得分:0)

  

实现将系列附加到DataFrame的相同目标的方法   是将数据转换为列表数组,并将数组附加到DataFrame。

数据作为列表数组

  

def get_example(idx):

     
   list1 = (idx+1,idx+2 ,chr(idx + 97))
   data = [list1]
   return(data)
  
     

df1 = pd.DataFrame()

     

表示范围(4)中的idx:

     
   data = get_example(idx)
   df1= df1.append(data, ignore_index = True)