使用字符串和数字生成列名称

时间:2017-01-06 10:38:07

标签: python pandas dataframe

非常基本的问题:当我希望获得20个名称为s1,s2,s3,...,s20的列时,为pandas数据帧生成一组列名的最简单方法(最少代码)是什么?

1 个答案:

答案 0 :(得分:2)

您可以使用列表推导来生成列名称:

In [66]:
col_list = ['s' + str(x) for x in range(1,21)]
col_list

Out[66]:
['s1',
 's2',
 's3',
 's4',
 's5',
 's6',
 's7',
 's8',
 's9',
 's10',
 's11',
 's12',
 's13',
 's14',
 's15',
 's16',
 's17',
 's18',
 's19',
 's20']

之后,您可以将其作为column arg传递给DataFrame ctor:

In [70]:
df = pd.DataFrame(np.random.randn(5,20), columns=col_list)
df.columns

Out[70]:
Index(['s1', 's2', 's3', 's4', 's5', 's6', 's7', 's8', 's9', 's10', 's11',
       's12', 's13', 's14', 's15', 's16', 's17', 's18', 's19', 's20'],
      dtype='object')

或者只是通过直接分配来覆盖columns属性:

In [71]:
df = pd.DataFrame(np.random.randn(5,20))
df.columns = col_list
df.columns

Out[71]:
Index(['s1', 's2', 's3', 's4', 's5', 's6', 's7', 's8', 's9', 's10', 's11',
       's12', 's13', 's14', 's15', 's16', 's17', 's18', 's19', 's20'],
      dtype='object')

您也可以使用renamerename_axis,但它们会覆盖已存在相关post

的预先存在的列名

您还可以为从范围创建的系列添加前缀:

In [76]:
col_list = 's' + pd.Series(np.arange(1,21)).astype(str)
df.columns= col_list
df.columns

Out[76]:
Index(['s1', 's2', 's3', 's4', 's5', 's6', 's7', 's8', 's9', 's10', 's11',
       's12', 's13', 's14', 's15', 's16', 's17', 's18', 's19', 's20'],
      dtype='object')