【问题标题】:Pandas Column Split (Array)Pandas 列拆分(数组)
【发布时间】:2021-11-18 11:48:50
【问题描述】:

以下是我在 SQL Server 中的数据

在python中读取数据后变成这样

我使用下面的代码将值拆分为多列

# 1. To split single array column to multiple column based on '\t'
df[['v1','v2','v3','v4','v5','v6','v7','v8','v9','v10','v11','v12','v13','v14','v15',\
       'v16','v17','v18','v19','v20','v21','v22','v23','v24','v25','v26','v27','v28',\
'v29','v30','v31','v32','v33','v34','v35','v36','v37','v38','v39','v40','v41']] = df['_VALUE'].str.split(pat="\t", expand=True)

# 2. To remove the '\r\n' from the last column
df['v41'] = df['v41'].replace(r'\s+|\\n', ' ', regex=True)

但在某些数据集中,数组值更多,例如。 100列,上面的代码这么大。我必须从 V1 写到 V100。有什么简单的方法可以做到这一点。

【问题讨论】:

    标签: python arrays pandas


    【解决方案1】:

    您可以将代码中的硬编码数组替换为使用以下方法为您生成数组的数组:

    df[[f'v{x}' for x in range(100)]] = df['_VALUE'].str.split(pat="\t", expand=True)
    

    【讨论】:

    • 1) 我们可以。首先,我建议找到最大列数:max(list([x.count('\t")+1 for x in df['_VALUE']])) 这个字符串可以输入,而不是 100。 2. 这是另一个挑战。由于每一行都有不同的最后一列,因此您必须稍微更改过去的解决方案。使用该行中的列数创建一个列:df['columns_num'] = list([x.count('\t")+1 for x in df['_VALUE']])) 然后已经替换所需的列df.iloc[i, x].replace(r'\s+|\\n', ' ', regex=True)
    • max(list([x.count('\t")+1 for x in df['_VALUE']])) - 代码一直运行很长时间。我认为它会搜索所有行在 _VALUE 列的 df 中
    • 有这么多行吗?然后您可以尝试通过应用,但我不记得确切的语法。试着看几行的例子,通常会产生list([x.count('\t")+1 for x in df['_VALUE']]
    • HM。现在我检查了我的数据。它对我很有效
    • 是的,数据框有很多行。它以毫秒为单位记录,所以
    猜你喜欢
    • 1970-01-01
    • 2020-09-21
    • 2023-01-27
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多