使用pandas后,为什么我的数据框中出现空行?

Jac*_*ley 5 python python-3.x pandas

我是Python和Pandas的新手,并试图弄清楚如何进行简单的split-join-apply.我遇到的问题是我在所有数据帧的顶部得到一个空白行我从Pandas的应用函数回来了,我不知道为什么.谁能解释一下?

以下是演示问题的最小示例,而不是我的实际代码:

sorbet = pd.DataFrame({
  'flavour': ['orange', 'orange', 'lemon', 'lemon'],
  'niceosity' : [4, 5, 7, 8]})

def calc_vals(df, target) :
    return pd.Series({'total' : df[target].count(), 'mean' : df[target].mean()})

sorbet_grouped = sorbet.groupby('flavour')
sorbet_vals = sorbet_grouped.apply(calc_vals, target='niceosity')
Run Code Online (Sandbox Code Playgroud)

如果我那么print(sorted_vals)我得到这个输出:

         mean  total
flavour                 <--- Why are there spaces here?
lemon     7.5      2
orange    4.5      2

[2 rows x 2 columns]
Run Code Online (Sandbox Code Playgroud)

比较这个print(sorbet):

  flavour  niceosity     <--- Note how column names line up
0  orange          4
1  orange          5
2   lemon          7
3   lemon          8

[4 rows x 2 columns]
Run Code Online (Sandbox Code Playgroud)

造成这种差异的原因是什么?我该如何解决?

unu*_*tbu 11

groupby/apply操作返回的是一个具有命名索引的新DataFrame.该名称对应于原始DataFrame分组的列名称.

名称显示在索引上方.如果将其重置为None,则该行将消失:

In [155]: sorbet_vals.index.name = None

In [156]: sorbet_vals
Out[156]: 
        mean  total
lemon    7.5      2
orange   4.5      2

[2 rows x 2 columns]
Run Code Online (Sandbox Code Playgroud)

请注意,这name很有用 - 我不建议删除它.该名称允许您通过名称而不仅仅是数字来引用该索引.


如果您希望索引是列,请使用reset_index:

In [209]: sorbet_vals.reset_index(inplace=True); sorbet_vals
Out[209]: 
  flavour  mean  total
0   lemon   7.5      2
1  orange   4.5      2

[2 rows x 3 columns]
Run Code Online (Sandbox Code Playgroud)