我确定必须有一种简单的方法来执行此操作:我想创建一个列表,该列表最终将成为DataFrame的列名。将有13列,每列代表一个时间段,称为“期间n”,其中n是周期号。我认为可能存在一种通过循环构建此列表的方法,但是我将展示我尝试做的事情:
col_no = list(range(1,14))
col_name = ['Period' for n in range (1,14)]
col_list = col_name + col_no
print(col_list)
['Period',
'Period',
'Period',
'Period',
'Period',
'Period',
'Period',
'Period',
'Period',
'Period',
'Period',
'Period',
'Period',
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13]
然后我尝试了:
col_list = list(zip(col_name + col_no))
print(col_list)
[('Period',),
('Period',),
('Period',),
('Period',),
('Period',),
('Period',),
('Period',),
('Period',),
('Period',),
('Period',),
('Period',),
('Period',),
('Period',),
(1,),
(2,),
(3,),
(4,),
(5,),
(6,),
(7,),
(8,),
(9,),
(10,),
(11,),
(12,),
(13,)]
基本上,我只是想要一个易于生成的列表,其中显示“ Period 1”,“ Period 2”等。我对Python来说还很陌生,而且很困惑。在此先感谢
答案 0 :(得分:10)
您可以在循环迭代时将它们(数字和单词Period)连接在一起。
print([f'Period {i}' for i in range(1, 14)])
print(['Period {}'.format(i) for i in range(1, 14)])
答案 1 :(得分:7)
Pandas有方便的方法pandas.DataFrame.add_prefix
和pandas.DataFrame.add_suffix
为您做到这一点。
import pandas as pd
df = pd.DataFrame(1, list('abc'), range(1, 5))
df
1 2 3 4
a 1 1 1 1
b 1 1 1 1
c 1 1 1 1
df.add_prefix('Period_')
Period_1 Period_2 Period_3 Period_4
a 1 1 1 1
b 1 1 1 1
c 1 1 1 1
答案 2 :(得分:5)
您上次尝试的路线正确:
zip(col_name + col_no)
最大的问题是+
在那里。您将两个列表连接成一个大列表,然后尝试将其压缩。您要压缩两个列表:
zip(col_name, col_no)
…,然后添加结果对。
这意味着使用循环-无论是for语句,列表理解还是map
中的隐式循环,……。
此外,您不能只添加字符串和数字;您需要先将数字转换为字符串:
name + str(no)
…或使用字符串格式:
f"{name}{no}”
因此,将它们放在一起:
[name + str(no) for name, no in zip(col_name, col_no)]
还有其他方法可以解决此问题(例如,您实际上并不需要一堆相同名称的副本),但是这显示了如何从前往的地方到达目的地。
答案 3 :(得分:1)
尝试以下操作:
ARRAY
答案 4 :(得分:1)
您正在将数字列表附加到Period
列表中。要实现所需的功能,您需要遍历Period
的列表,并将它们与数字1到13连接。但是,存在一种更简单的解决方案,因此您可以尝试使用此方法。
col_list = ['Period ' + str(n) for n in range(14)]
print col_list
答案 5 :(得分:1)
列表理解是必经之路:
solution = (['Period %i' %i for i in range(1, 14)])