自动创建具有不同名称的数据框列

发布于 2025-01-09 11:12:41 字数 279 浏览 2 评论 0原文

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

我有这段代码

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

How can I create dataframe columns automatically with different names

I have this code

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

Which gives the result

   A  A  A  A  A
0  1  2  3  4  5

And I want the column names to be

   A1  A2  A3  A4  A5
0  1   2   3   4   5

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

星軌x 2025-01-16 11:12:41

如果可能,传递到 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

If possible pass to DataFrame correct columns names:

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

If need change values later with enumerate all columns names use:

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
送君千里 2025-01-16 11:12:41

一种选择是使用 enumerate,如果您在创建 DataFrame 之后执行此操作(在创建 DataFrame 时执行此操作,如 @jezrael 所建议,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

One option is with enumerate, if you are doing this after creating the DataFrame (doing this when creating the DataFrame, as suggested by @jezrael, IMO is a better option):

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
弥繁 2025-01-16 11:12:41

要处理任意输入列表,请使用 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

To handle an arbitrary input list use 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]

To handle any type of object without creating a copy, use 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]

output:

   A1  A2  A3  A4  A5
0   1   2   3   4   5
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文