【问题标题】:How do you split All columns in a large pandas data frame?如何拆分大熊猫数据框中的所有列?
【发布时间】:2020-04-04 15:19:23
【问题描述】:

我有一个非常大的数据框,我想根据逗号分隔符拆分除前两列之外的所有列。所以我需要在一个循环或其他方式中在逻辑上引用列名,以便一口气拆分所有列。

在我对 split 方法的测试中: 我已经能够明确地引用(即硬代码)单个列名(rs145629793)作为必需参数之一,结果是我想要的 2 个新列。

查看下面的python代码

硬编码列名 --

df[['rs1','rs2']] = df.rs145629793.str.split(",", expand = True)

问题: 引用实际的列名和重复代码是不可行的。

然后,我将拆分方法参数列表中的实际列名 rs145629793 替换为 columns[2]。

这会导致错误 'str 有 ni str 属性'

【问题讨论】:

  • 请展示您的数据框示例和您的预期输出

标签: pandas multiple-columns


【解决方案1】:

您可以使用iloc 按位置而不是名称来索引列。例如获取第三列:

df.iloc[:, 2]

因此,您可以轻松地遍历所需的列。

【讨论】:

  • 我会试试的。谢谢。
【解决方案2】:

我知道您在问什么,但提供一些输入数据和预期输出数据仍然很有帮助。我在下面的代码中包含了随机输入数据,因此您只需复制并粘贴它即可运行,并尝试将其应用于您的数据框:

import pandas as pd
your_dataframe=pd.DataFrame({'a':['1,2,3', '9,8,7'],
               'b':['4,5,6', '6,5,4'],
               'c':['7,8,9', '3,2,1']})
import copy

def split_cols(df):
    dict_of_df = {}
    cols=df.columns.to_list()
    for col in cols:
        key_name = 'df'+str(col)
        dict_of_df[key_name] = copy.deepcopy(df)
        var=df[col].str.split(',', expand=True).add_prefix(col)
        df=pd.merge(df, var, how='left', left_index=True, right_index=True).drop(col, axis=1)
    return df


split_cols(your_dataframe)

本质上,在此解决方案中,您可以创建要循环遍历的列的列表。然后循环遍历该列表并为运行split() 函数的每一列创建新的数据框。然后,您将索引中的所有内容重新合并在一起。我也:

  1. 包含列名前缀,因此列名没有重复名称,更容易识别
  2. 删除了我们进行拆分的旧列。
  3. 只需 import copy 并使用我创建的 split_cols() 函数并传递您的数据框的名称。

【讨论】:

  • 问题是我有一个非常大的数据框,无法明确引用每个列名。目前在我的示例中有 24 列,但这将增长到 1000 多列……因此使用字典作为中间数据结构是不可行的。
猜你喜欢
  • 1970-01-01
  • 2013-06-23
  • 1970-01-01
  • 2019-05-29
  • 1970-01-01
  • 2022-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多