使用不同的名称自动创建 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
如何使用不同的名称自动创建数据框列
我有这个代码
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