gpt4 book ai didi

python-3.x - 基于 Condition Pandas Dataframe 拆分列数据

转载 作者:行者123 更新时间:2023-12-03 17:12:13 25 4
gpt4 key购买 nike

我有一个大数据集,正在寻找将我的街道地址分成两列的东西 Street NumberStreet Name .

我想弄清楚如何有效地做到这一点,因为我首先需要处理街道地址,然后检查拆分的第一个索引是否有数字。

到目前为止,我有一个看起来像这样的工作代码。我创建了两个函数,一个用于从街道地址中提取街道号码数据,而另一个函数则替换街道地址中第一次出现的街道号码。

def extract_street_number(row):
if any(map(str.isdigit, row.split(" ")[0])):
return row.split(" ")[0]


def extract_street_name(address, streetnumber):
if streetnumber:
return address.replace(streetnumber, "", 1)
else:
return address

然后使用 apply 函数获得两列。
df[street_number] = df.apply(lambda row: extract_street_number(row[address_col]), axis=1)
df[street_name] = df.apply(lambda row: extract_street_name(row[address_col], row[street_number]), axis=1)

我想知道是否有更有效的方法来做到这一点?基于此当前例程,在处理街道名称列之前,我需要先构建街道编号列。

我正在考虑在地址列的第一次迭代中构建两个系列。伪代码是这样的,我只是不知道如何在 python 中对其进行编码。

伪代码:
  • 根据遇到非数字字符的第一个空格将地址拆分为两列:street_data = address.split(" ", maxsplit=1)
  • 如果 street_data[0] 有数字,则以这种方式返回列:
  •       df[street_number] = street_data[0]
    df[street_name] = street_data[1]
  • 否则,如果 street_data[0] 不是数字,则以这种方式返回列:
  •       df[street_number] = ""
    df[street_name] = street_data[0] + " " + street_data[1]
    # or just simply the address
    df[street_name] = address

    顺便说一下,这是数据的工作样本:
    # In
    df = pd.DataFrame({'Address':['111 Rubin Center', 'Monroe St', '513 Banks St', '5600 77 Center Dr', '1013 1/2 E Main St', '1234C Main St', '37-01 Fair Lawn Ave']})

    # Out
    Street_Number Street_Name
    0 111 Rubin Center
    1 Monroe St
    2 513 Banks St
    3 560 77 Center Dr
    4 1013 1/2 E Main St
    5 1234C Main St
    6 37-01 Fair Lawn Ave

    最佳答案

    TL;博士:
    这可以通过三个步骤来实现——
    步骤 1-

    df['Street Number'] = [street_num[0] if any(i.isdigit() for i in street_num[0]) else 'N/A' for street_num in df.Address.apply(lambda s: s.split(" ",1))]
    步骤 2-
    df['Street Address'] = [street_num[1] if any(i.isdigit() for i in street_num[0]) else 'N/A' for street_num in df.Address.apply(lambda s: s.split(" ",1))]
    步骤 3-
    df['Street Address'].loc[df['Street Address'].str.contains("N/A") == True] = df1['Address'].loc[df1['Street Address'].str.contains("N/A") == True]

    说明-
    在数据框中添加了另外两个测试用例以提高代码灵活性(第 7,8 行)-
    Initial Dataframe
    第 1 步 - 我们在这里将街道号码与地址分开。这是通过在拆分地址字符串并初始化为 Street Number 之后从列表中切分第一个元素来完成的。柱子。
    如果第一个元素不包含数字, N/A附加在 Street Number 中柱子。
    Step 1
    第 2 步 - 由于切片字符串中的第一个元素包含 Street Number ,第二个元素必须是 Street Address因此附加到 Street Address柱子。
    Step 2
    第 3 步 - 由于第二步, Street Address对于不包含数字并由此解决的“地址”变为“不适用” -
    Step 3
    因此,我们可以在 之后分三步解决这个问题。小时的奋斗转换。

    关于python-3.x - 基于 Condition Pandas Dataframe 拆分列数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60881321/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com