创建带有连续数字的字符串列表

时间:2018-07-10 17:04:11

标签: python pandas

我确定必须有一种简单的方法来执行此操作:我想创建一个列表,该列表最终将成为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来说还很陌生,而且很困惑。在此先感谢

6 个答案:

答案 0 :(得分:10)

您可以在循环迭代时将它们(数字和单词Period)连接在一起。

Python 3.6 +

print([f'Period {i}' for i in range(1, 14)])

Python 2.7 +

print(['Period {}'.format(i) for i in range(1, 14)])

答案 1 :(得分:7)

Pandas有方便的方法pandas.DataFrame.add_prefixpandas.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)])