【问题标题】:How to split a DataFrame Column into Four parts using two different delimiters如何使用两个不同的分隔符将 DataFrame 列拆分为四个部分
【发布时间】:2021-09-12 19:19:46
【问题描述】:

我正在开展一个项目,该项目将采用我们旧的数据库系统查询并将它们映射到新的数据库系统查询。我希望能够读取 FROM 语句,将它们拆分为数据库、模式、表和别名。数据如下所示:

FROM DatabaseA.SchemaA.Table1 tbl 
    INNER JOIN DatabaseB.SchemaC.Table13 tbl13 
         ON tbl.column12 = tbl.column12

我从完整的 SQL 查询中创建了一个数据框,并将 FROM 语句提取到一个新的数据框中(我使用了两个不同的函数):

# Reads file - creates dataframe
def readSQL(file_path):
    # convert to a string
    file_path=file_path.decode("utf-8")
    
    # Set sql_script as a global variable
    # Once sql_script is populated it can
    # be called from other functions
    global sql_script
    
    # Open file
    # Separate every line
    df = open(file_path,'r')
    lines = df.readlines()
    df.close()
    # print(lines)
    
    # Create the dataframe
    sql_script = pd.DataFrame(columns=('StatementDSC','ColumnTable'))
    i = 0
    StatementDSC = ""
    ColumnTable = ""

    for line in lines:
        if ('SELECT' in line) or ('FROM' in line) or ('WHERE' in line):
            StatementDSC = line.strip() # remove \n
        else: #(',' in line) or ('.' in line):
            ColumnTable = line.strip() # remove \t and /n
    
        # Create next line
        sql_script.loc[i] = [StatementDSC,ColumnTable]
        i = i + 1
        
    return sql_script

    # print(sql_script)
    
# Reads FROM Statement breaks down tables/aliases/joins
def readFROM(full_SQL):
    # Create FROM Dataframe
    df = full_SQL.loc[full_SQL['StatementDSC']== 'FROM']
    
    # Drop empty rows
   # df.drop(df.ColumnTable == "",axis=0)
    print(df)
    
    # split ColumnTable by periods
    # Create new Columns: 
        # Database, Schema, Table
    split_data = df["ColumnTable"].str.split('.')
    data = split_data.to_list()
    names = ["Database","Schema","TableAlias"]
    new_df = pd.DataFrame(data,columns=names)
    print(new_df)

我可以从中拆分数据:

     StatementDSC              ColumnTable
5         FROM                                                   
6         FROM                PPDAC.PLAN.DOCTORS Docs
7         FROM  INNER JOIN PPDAC.PLAN.DOCTORSINFO DocInfo
8         FROM                    ON Docs.DocID = DocInfo.DocID

到这里:

    Database              Schema           TableAlias
0                         None             None
1  PPDAC                  PLAN             DOCTORS Docs
2  INNER JOIN PPDAC     PLAN             DOCTORSINFO DocInfo

如何添加另一个分隔符以同时使用句点和空格将它们分成四个?

我看过其他答案,但它们是针对一行而不是在多行上重复的。

【问题讨论】:

  • 你是如何得到第 2 行的?我在您原来的df 中没有看到“CLARITY”?
  • 我的错误 - 我删除了我们的专有名称并错过了它。我会解决的。
  • 所以如果你的第一个数据框是df,你不只需要df["ColumnTable"].str.split(".", expand=True)吗?
  • 我可能会改变它,但这不是我的问题。我需要知道如何用多个分隔符分隔。
  • 这正是我要告诉你的。你先和一个分开。然后和另一个。

标签: python dataframe split csv


【解决方案1】:

使用正则表达式根据多个分隔符进行拆分,例如[括号]中的任何分隔符,在这种情况下。或空间。看这个玩具例子:

row1list = ['1.2.3 4']
row2list = ['1.4.5 6']
row3list = ['2.7.8 9']
df = pd.DataFrame([row1list, row2list, row3list], columns=['ColumnTable'])

df2 = df['ColumnTable'].str.split('[ .]', expand=True)
print(df2)
#    0  1  2  3
# 0  1  2  3  4
# 1  1  4  5  6
# 2  2  7  8  9


【讨论】:

  • 这太棒了!这是一个很大的帮助,它奏效了!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-05
  • 1970-01-01
  • 1970-01-01
  • 2016-04-06
  • 1970-01-01
  • 2020-06-18
  • 1970-01-01
相关资源
最近更新 更多