首页 > 解决方案 > Python:如何从数据框列中的 SQL 片段解析列名称

问题描述

数据框包含一个IDCONDITION这是一个 SQL 片段

|ID|CONDITION                                                               |
|--|------------------------------------------------------------------------|
|1 |STATUS = "ABCD"                                                         |
|1 |STATUS = "DEFG"                                                         |
|1 |CASE WHEN STATUS = "XYZ" AND MOD = 1 THEN "CORRECT" ELSE "INCORRECT" END|
|2 |CODEX = 100                                                             |
    

要求是从 SQL CONDITION中解析出列名并创建ID和列的唯一组合

Am expecting 
|ID|COLUMN |
|--|-------|
|1 |STATUS |
|1 |MOD    |
|2 |CODEX  |

编辑:在条件列中,我们编写相当于 SQL 的文本,并将其作为列附加到 sql。输出为三行,因为 ID = 1 的第一行和第二行仅使用一个条件(列)STATUS。所以对于 ID = 1,列列表将是 STATUS 和 MOD。对于 ID=2,它是 CODEX。

标签: pythonpandasdataframe

解决方案


你可以试试这个:

import pandas as pd

# Setup
df = pd.DataFrame(
    {
        "ID": [1, 1, 1, 2],
        "CONDITION": [
            'STATUS = "ABCD"',
            'STATUS = "DEFG"',
            'CASE WHEN STATUS = "XYZ" AND MOD = 1 THEN "CORRECT" ELSE "INCORRECT" END',
            "CODEX = 100",
        ],
    }
)
KEYWORDS = ("STATUS", "MOD", "CODEX")  # Add more keywords as needed
new_df = pd.DataFrame({"ID": [], "COLUMN": []})

# Iterate to find matching rows
for keyword in KEYWORDS:
    temp_df = df.loc[df["CONDITION"].str.contains(keyword), ["ID"]]
    temp_df["COLUMN"] = keyword
    new_df = pd.concat([new_df, temp_df])

# Clean-up
new_df["ID"] = new_df["ID"].astype(int)
new_df = new_df.drop_duplicates().reset_index(drop=True)

print(new_df)
# Outputs
   ID  COLUMN
0   1  STATUS
1   1     MOD
2   2   CODEX

推荐阅读