我可以按列拆分数据框吗?
Posted
技术标签:
【中文标题】我可以按列拆分数据框吗?【英文标题】:Can i split a Dataframe by columns? 【发布时间】:2021-09-01 08:31:59 【问题描述】:我需要按列拆分数据框, 我做了一个简单的代码,运行没有错误,但没有给我预期的回报。 这是简单的代码:
dados = pd.read_excel(r'XXX')
for x in range(1,13):
selectmonth = x
while selectmonth < 13:
df_datas = dados.loc[dados['month'] == selectmonth]
correlacao2 = df_datas.corr().round(4).iloc[0]
else: break
print()
我是这样手动输入选定的嘴巴的:
dfdatas = dados.loc[dados['month'] == selectmonth]
print('\n Voce selecionou o mês: ', selectmonth)
colunas2 = list(dfdatas.columns.values)
correlacao2 = dfdatas.corr().round(4).iloc[0]
print(correlacao2)
有没有办法在循环中做到这一点?从第 1 个月到第 12 个月?
【问题讨论】:
为什么在for
循环中使用while-else
循环?
【参考方案1】:
对于 pandas,您应该尽可能避免使用循环,它非常慢。您可以通过索引切片在此处实现您想要的。我假设您的列只是月份数字,您可以这样做:
设置示例 df:
df = pd.DataFrame([], columns=range(15))
df:
Columns: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
Index: []
获取编号为 1 到 12 的列:
dfdatas = df.loc[:, 1:12]
Columns: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
Index: []
将来,您应该在问题中包含示例数据。
【讨论】:
【参考方案2】:试试这个:
correlacao2 = dados.corr(method='pearson').round(4)
for month in dados.columns:
print('\n Voce selecionou o mês: ', month)
result=correlacao2.loc[month]
result=pd.DataFrame(result)
print(result)
这里我使用了corr()
和for-loop
方法并将它们转换为DataFrame
dados 是您的数据框名称
如果您的列名称是数字,则使用 dados.rename(columns='1': 'Jan','2':'Feb','3':'Mar')
将其重命名为月份名称。同样,您也包括其他月份来重命名列名。重命名后,应用上面的代码得到你想要的答案。
如果你不想重命名,那么在上面的代码中使用.iloc[]
而不是.loc[]
【讨论】:
以上是关于我可以按列拆分数据框吗?的主要内容,如果未能解决你的问题,请参考以下文章