【发布时间】:2022-01-01 21:10:44
【问题描述】:
这是一个通用代码,代表我的脚本中发生的事情:
import pandas as pd
import numpy as np
dic = {}
for i in np.arange(0,10):
dic[str(i)] = df = pd.DataFrame(np.random.randint(0,1000,size=(5000, 20)),
columns=list('ABCDEFGHIJKLMNOPQRST'))
df_out = pd.DataFrame(index = df.index)
for i in np.arange(0,10):
df_out['A_'+str(i)] = dic[str(i)]['A'].astype('int')
df_out['D_'+str(i)] = dic[str(i)]['D'].astype('int')
df_out['H_'+str(i)] = dic[str(i)]['H'].astype('int')
df_out['I_'+str(i)] = dic[str(i)]['I'].astype('int')
df_out['M_'+str(i)] = dic[str(i)]['M'].astype('int')
df_out['O_'+str(i)] = dic[str(i)]['O'].astype('int')
df_out['Q_'+str(i)] = dic[str(i)]['Q'].astype('int')
df_out['R_'+str(i)] = dic[str(i)]['R'].astype('int')
df_out['S_'+str(i)] = dic[str(i)]['S'].astype('int')
df_out['T_'+str(i)] = dic[str(i)]['T'].astype('int')
df_out['C_'+str(i)] = dic[str(i)]['C'].astype('int')
您会注意到,只要插入列的 df_out(输出)数超过 100,我就会收到以下警告:
PerformanceWarning:DataFrame 高度碎片化。这通常是多次调用frame.insert的结果,性能较差。考虑改用 pd.concat
问题是我该如何使用:
pd.concat()
并且仍然有依赖于字典键的自定义列名?
重要提示:我仍然想保留特定的列选择,而不是全部。 就像示例中一样: A, D , H , I 等...
特别编辑(基于 Corralien 的回答)
cols = {'A': 'float',
'D': 'bool'}
out = pd.DataFrame()
for c, df in dic.items():
for col, ftype in cols.items():
out = pd.concat([out,df[[col]].add_suffix(f'_{c}')],
axis=1).astype(ftype)
非常感谢您的帮助!
【问题讨论】:
标签: pandas insert concatenation