将行附加到空 DataFrame 不起作用

Sub*_*ndu 5 python python-2.7 pandas

我有一段 Python 代码,基本上可以简化为以下内容:

import pandas as pd

months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
l = [1607.8, 1688.17, 1605.66, 1469.03, 1312.65, 1451.74, 1445.26, 1350.94, 1371.27, 1201.6, 1240.59, 1291.43]

# First, construct a empty DataFrame.
df = pd.DataFrame(columns = months, dtype=float)

# Then, keep adding rows to DataFrame given by list l.
df.append([l])

print df
Run Code Online (Sandbox Code Playgroud)

预期输出为:

      Jan      Feb      Mar      Apr      May      Jun      Jul      Aug  \
0  1607.8  1688.17  1605.66  1469.03  1312.65  1451.74  1445.26  1350.94   

       Sep     Oct      Nov      Dec  
0  1371.27  1201.6  1240.59  1291.43  
Run Code Online (Sandbox Code Playgroud)

但是我得到的是以下内容:

Empty DataFrame
Columns: [Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec]
Index: []
Run Code Online (Sandbox Code Playgroud)

如果我替换df.append([l])为以下内容,则对我来说一切正常。

df = pd.DataFrame([l], columns = months)
df.columns = months
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

小智 6

pd.append()没有发生在原地。您需要保存输出才能使用它。


jpp*_*jpp 5

您应该使用pd.DataFrame.loc给定列表添加一行l

df.loc[len(df.index)+1] = l
Run Code Online (Sandbox Code Playgroud)

该方法pd.DataFrame.append用于将一个数据帧或其他可附加对象附加到现有数据帧:

DataFrame.append(其他,ignore_index=False,verify_integrity=False,sort=None

将其他行附加到此帧的末尾


但是,形成一个列表列表然后pd.DataFrame.append只调用一次会更有效。

list_of_lists = []

for item in some_iterable:
    l = foo(item)
    list_of_lists.append(l)

df = df.append(pd.DataFrame(list_of_lists, columns=df.columns))
Run Code Online (Sandbox Code Playgroud)

这样做的原因list.append是比pd.DataFrame.loc分配便宜。