我可以按列拆分数据框吗?

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[]

【讨论】:

以上是关于我可以按列拆分数据框吗?的主要内容,如果未能解决你的问题,请参考以下文章

按列值将数据框拆分为两个[重复]

按列名称将数据框拆分为较小的数据框

使用 ETL 工具按列值将数据拆分为不定数量的表

按列拆分查询结果的最佳实践

熊猫如何按间隔按列拆分数据帧

熊猫如何按间隔按列拆分数据帧