使用不同的名称自动创建 Dataframe 列

Create Dataframe Columns Automatically with Different Names

如何使用不同的名称自动创建数据框列

我有这个代码

df=pd.DataFrame(columns=['A']*5)
df.loc[len(df)]=[1,2,3,4,5]

给出结果

   A  A  A  A  A
0  1  2  3  4  5

我希望列名是

   A1  A2  A3  A4  A5
0  1   2   3   4   5

如果可能,传递给 DataFrame 正确的列名称:

df=pd.DataFrame(columns=[f'A{i}' for i in range(1, 6)])
df.loc[len(df)]=[1,2,3,4,5]
print (df)
  A1 A2 A3 A4 A5
0  1  2  3  4  5

如果以后需要更改值并枚举所有列名,请使用:

df=pd.DataFrame(columns=['A']*5)

s = df.columns.to_series()
df.columns += s.groupby(s).cumcount().add(1).astype(str)
df.loc[len(df)]=[1,2,3,4,5]

print (df)
  A1 A2 A3 A4 A5
0  1  2  3  4  5

df=pd.DataFrame(columns=['A']*2 + ['B'] * 2 + ['C'])

s = df.columns.to_series()

df.columns += s.groupby(s).cumcount().add(1).astype(str)

df.loc[len(df)]=[1,2,3,4,5]

print (df)
  A1 A2 B1 B2 C1
0  1  2  3  4  5

要处理任意输入列表,请使用 enumerate:

df=pd.DataFrame(columns=[f'{a}{b}' for b,a in enumerate(['A']*5, start=1)])
df.loc[len(df)]=[1,2,3,4,5]

要在不创建副本的情况下处理任何类型的对象,请使用 itertools.repeat:

from itertools import repeat
df=pd.DataFrame(columns=[f'{a}{b+1}' for a,b in zip(repeat('A'), range(5))])
df.loc[len(df)]=[1,2,3,4,5]

输出:

   A1  A2  A3  A4  A5
0   1   2   3   4   5

一个选项是 enumerate,如果您在创建 DataFrame 之后执行此操作(按照@jezrael 的建议,在创建 DataFrame 时执行此操作,IMO 是更好的选择):

df.columns = [f"{col}{num+1}" for num, col in enumerate(df.columns)]
df

   A1  A2  A3  A4  A5
0   1   2   3   4   5