追加行以清空DataFrame无法正常工作

时间:2018-05-19 22:06:32

标签: 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

预期输出为:

      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  

但我得到的是以下内容:

Empty DataFrame
Columns: [Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec]
Index: []

如果我用以下内容替换df.append([l]),那么我的工作正常。

df = pd.DataFrame([l], columns = months)
df.columns = months

我做错了什么?

5 个答案:

答案 0 :(得分:2)

您应该使用pd.DataFrame.loc添加一个列表l

df.loc[len(df.index)+1] = l

方法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))

原因是list.appendpd.DataFrame.loc分配便宜。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

最简单的方法:

# Apply function and story multiple page urls in column called page_nums
catdf['page_nums'] = catdf.apply(get_page2, axis=1)

答案 3 :(得分:0)

为了构建数据l已经到位的数据框,这可能是最好的:

pd.DataFrame([l], columns=months)

要通过append方法将行添加到现有数据框,可以使用:

df.append(pd.DataFrame([l], columns=months))

为了追加一般行,jpp提出的建议可能是最好的。

答案 4 :(得分:0)

如果列的顺序无关紧要,您可以使用以下一行:

df = pd.DataFrame(dict(zip(months,l)),index=[0])

输出:

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

       May      Nov     Oct      Sep  
0  1312.65  1240.59  1201.6  1371.27

如果您想按月的顺序排列列,那么只需在构造数据框后添加此行:

df = df[months]

输出:

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