我正在尝试在Pandas中构建一个新的数据框。结果数据框将需要部门作为索引和日期范围的顶部。到目前为止,我有以下内容:
#generate a list of years within report range
timeframes_yrs = pd.date_range(start_date,end_date, freq='12MS').strftime('%m/%d/%Y').tolist()
#create a new dataframe with columns named after the output of the list
df=pd.DataFrame(columns=['department', list(timeframes_yrs)])
这似乎为部门创建了一个列(按预期方式),但随后提供了包含我的整个列表的列。
Empty DataFrame
Columns: [department, [01/01/2017, 01/01/2018, 01/01/2019]]
理想情况下,我希望其中每个都是列:
Empty DataFrame
Columns: [department, 01/01/2017, 01/01/2018, 01/01/2019]
我尝试将单词“ departments”设置为变量,并将其传递给相同的结果。我也尝试过调整语法(括号,括号等),但没有成功。
我的问题是-我是否需要通过“ For”循环或先添加列表,然后再添加附加列来完成此操作,还是有一种方法可以通过以下方式将字符串和列表传递到Pandas数据框中?创建为“列”。
答案 0 :(得分:1)
使用*
,即iterable unpacking operator
df = pd.DataFrame(columns=['department', *timeframes_yrs])
Columns: [department, 01/01/2017, 01/01/2018, 01/01/2019]
答案 1 :(得分:1)
每个pandas.DataFrame columns
的文档都采用类似数组的形式。现在,您要在列列表中的内部中传递日期列表,因此熊猫认为您只需要两列。 @rafaelc是创建所有列的好方法。您提到您希望将部门作为索引,因此,在这种情况下,请尝试仅将日期列表作为列传递,并使用部门列表作为索引:
departments = ['sales', 'marketing', 'it']
df2 = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), index=departments, columns=(['a', 'b', 'c']))
a b c
sales 1 2 3
marketing 4 5 6
it 7 8 9