我有一段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
我做错了什么?
答案 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.append
比pd.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