2017-03-09 36 views
0

我正在使用熊猫,并希望添加行到一个空的DataFrame列已经建立。将列添加到空数据框与列

到目前为止我的代码看起来像这样...

def addRows(cereals,lines): 
    for i in np.arange(1,len(lines)): 
     dt = parseLine(lines[i]) 
     dt = pd.Series(dt) 
     print(dt) 
    # YOUR CODE GOES HERE (add dt to cereals) 
     cereals.append(dt, ignore_index = True) 
    return(cereals) 

然而,当我跑...

cereals = addRows(cereals,lines) 
cereals 

没有行数据帧的回报,只是列。我不知道我在做什么错,但我很确定它与append方法有关。任何人有什么想法,我做错了什么?

回答

0

有两种可能理由,你的代码没有按预期方式操作:

  • cereals.append(dt, ignore_index = True)是不是做你认为它是。你试图追加一个系列,而不是DataFrame。

  • cereals.append(dt, ignore_index = True)不会修改cereals到位,所以当您返回它时,您将返回一个不变的副本。同等职能应该是这样的:

-

>>> def foo(a): 
... a + 1 
... return a 
... 
>>> foo(1) 
1 

我没有我的机器上测试了这一点,但我认为你是固定的解决方案是这样的:

def addRows(cereals, lines): 
    for i in np.arange(1,len(lines)): 
     data = parseLine(lines[i]) 
     new_df = pd.DataFrame(data, columns=cereals.columns) 
     cereals = cereals.append(new_df, ignore_index=True) 
    return cereals 

顺便说一下..我真的不知道在哪里线是从哪里来的,但马上我至少修改它看起来像这样:

data = [parseLine(line) for line in lines] 
cereals = cereals.append(pd.DataFrame(data, cereals.columns), ignore_index=True) 

How to add an extra row to a pandas dataframe

你也可以创建一个新的数据帧和仅仅是数据帧附加到现有的一个。例如。

>>> import pandas as pd 
>>> empty_alph = pd.DataFrame(columns=['letter', 'index']) 
>>> alph_abc = pd.DataFrame([['a', 0], ['b', 1], ['c', 2]], columns=['letter', 'index']) 
>>> empty_alph.append(alph_abc) 
    letter index 
0  a 0.0 
1  b 1.0 
2  c 2.0 

正如我在链接注意到,您还可以使用loc方法对数据帧:

>>> df = empty_alph.append(alph_abc) 
>>> df.loc[df.shape[0]] = ['d', 3] // df.shape[0] just finds next # in index 
    letter index 
0  a 0.0 
1  b 1.0 
2  c 2.0 
3  d 3.0