做一名学霸 发表于 2025-11-12 09:33:36

大佬救命,如果拆分维度列,具体见描述

本帖最后由 做一名学霸 于 2025-11-12 09:33 编辑

各位大佬好,目前在利用Pandas清洗Excel的数据,遇到一个难题,就是有一个维度列要拆分,具体效果:
将核算维度列拆分,拆分后,核算维度作为新的列名,对应的值作为对应列的值:
比如下图中有银行存款、应收账款,拆出来后
科目名称   银行账户   合作金融机构   客商   产品服务类型    项目档案
银行存款   172...      中国农业...         
应收账款                                        房县...   提供劳务         XM9012655

这个利用Pandas怎么实现?请各位大佬指点。

快速收敛 发表于 2025-11-12 13:18:24

交给AI实现

lscp 发表于 2025-11-12 19:08:18

本帖最后由 lscp 于 2025-11-12 19:10 编辑

快速收敛 发表于 2025-11-12 13:18
交给AI实现

用哪个AI??我也有不少Excel文件,用哪个AI可以帮助转换成Python的自动处理?

天空静坐着 发表于 2025-11-13 15:09:15

可以直接把你的要求喂给AI,会直接给你做好。

天空静坐着 发表于 2025-11-13 15:10:11

要实现对“核算维度”列的信息拆分,我们可以利用Python的字符串处理和字典操作来完成。以下是详细的实现步骤:


### 步骤1:读取数据(以模拟数据为例,若从Excel读取可使用`pandas`)
首先,我们模拟表格中的数据,将“科目名称”和“核算维度”整理成列表:
```python
data = [
    {"科目名称": "银行存款", "核算维度": "银行账户:17218801040017302,房县光谷环保科技有限公司;合作金融机构:中国农业银行股份有限公司房县支行"},
    {"科目名称": "应收账款_应收销", "核算维度": "客商:KS10019077,房县住房和城乡建设局;产品服务类型:020103,提供劳务-加工劳务-水务运营;项目档案:XM9012655,房县城乡供排水一体化PPP项目"},
    {"科目名称": "应收账款_应收服", "核算维度": "客商:KS10019077,房县住房和城乡建设局;项目档案:XM9012655,房县城乡供排水一体化PPP项目;产品服务类型:020103,提供劳务-加工劳务-水务运营"},
    {"科目名称": "应收账款_应收服", "核算维度": "客商:KS10019077,房县住房和城乡建设局;项目档案:XM9012655,房县城乡供排水一体化PPP项目;产品服务类型:040302,现代服务-研发和技术服务-污水处理"},
    {"科目名称": "应收账款_暂估款", "核算维度": "客商:KS10019077,房县住房和城乡建设局;项目档案:XM9012655,房县城乡供排水一体化PPP项目;产品服务类型:04010101,现代服务-建筑服务-工程服务-工程施工"},
    {"科目名称": "应收账款_暂估款", "核算维度": "客商:KS10019077,房县住房和城乡建设局;项目档案:XM9012655,房县城乡供排水一体化PPP项目;产品服务类型:020103,提供劳务-加工劳务-水务运营"},
    {"科目名称": "应收账款_暂估款", "核算维度": "客商:KS10019077,房县住房和城乡建设局;项目档案:XM9012655,房县城乡供排水一体化PPP项目;产品服务类型:040302,现代服务-研发和技术服务-污水处理"},
    {"科目名称": "应付账款_暂估款", "核算维度": "客商:KS10019077,房县住房和城乡建设局;项目档案:XM9012655,房县城乡供排水一体化PPP项目;产品服务类型:01101,销售商品-水电气-水"},
    {"科目名称": "预付账款_预付采", "核算维度": "客商:KS10003539,中国石化销售股份有限公司湖北十堰石油分公司;合同档案:999,通用合同档案;项目档案:XM9012655,房县城乡供排水一体化PPP项目"}
]
```


### 步骤2:定义拆分函数
我们需要将“核算维度”中的字符串按**分号(;)**拆分大类,再按**冒号(:)**拆分键和值,最终整理成字典:
```python
def split_dimension(dimension_str):
    dim_dict = {}
    # 先按分号拆分大类
    categories = dimension_str.split(';')
    for cat in categories:
      # 再按冒号拆分键和值(假设冒号是唯一的分隔符)
      key, value = cat.split(':', 1)# split(':', 1)表示只按第一个冒号拆分
      dim_dict = value.strip()
    return dim_dict
```


### 步骤3:遍历数据并拆分
对每一条数据的“核算维度”执行拆分,并将结果保存:
```python
for item in data:
    dimension = item["核算维度"]
    split_result = split_dimension(dimension)
    item["核算维度拆分"] = split_result# 新增列保存拆分结果

# 打印示例结果
for item in data[:2]:# 只打印前2条示例
    print("科目名称:", item["科目名称"])
    print("核算维度拆分:", item["核算维度拆分"])
    print("-" * 50)
```


### 输出结果(示例)
```
科目名称: 银行存款
核算维度拆分: {'银行账户': '17218801040017302,房县光谷环保科技有限公司', '合作金融机构': '中国农业银行股份有限公司房县支行'}
--------------------------------------------------
科目名称: 应收账款_应收销
核算维度拆分: {'客商': 'KS10019077,房县住房和城乡建设局', '产品服务类型': '020103,提供劳务-加工劳务-水务运营', '项目档案': 'XM9012655,房县城乡供排水一体化PPP项目'}
--------------------------------------------------
```


### 若从Excel读取数据(拓展)
如果数据存储在Excel中,可使用`pandas`库读取并处理:
```python
import pandas as pd

# 读取Excel文件
df = pd.read_excel("你的文件.xlsx")

# 定义拆分函数并应用到“核算维度”列
df["核算维度拆分"] = df["核算维度"].apply(split_dimension)

# 保存结果(可选)
df.to_excel("拆分结果.xlsx", index=False)
```


通过以上代码,即可实现对“核算维度”列的结构化拆分,便于后续的数据分析和处理。
页: [1]
查看完整版本: 大佬救命,如果拆分维度列,具体见描述