如何将数据框字符串列拆分为两列?
在处理表格数据时,通常需要操作要提取的数据具体信息。一个常见的任务是将一列字符串值拆分为多列,每列包含原始字符串的一部分。
问题和要求
假设我们有一个 DataFrame名为 df 的一列称为 row,其中包含以下格式的字符串值:
row 0 00000 UNITED STATES 1 01000 ALABAMA 2 01001 Autauga County, AL 3 01003 Baldwin County, AL 4 01005 Barbour County, AL
我们的目标是拆分将 row 列分成两个新列:fips 和 row,其中 fips 包含每个字符串的前五个字符,row 包含其余字符。
使用 str.split() 的解决方案
分割行列的一种方法是使用 str.split() 方法。该方法采用正则表达式作为参数,并根据正则表达式指定的模式分割字符串。在我们的例子中,我们可以使用以下正则表达式:
r'(\d{5}) +'
此正则表达式将匹配由五个数字组成的序列,后跟一个或多个空格。然后,我们可以使用 str.split() 方法使用此正则表达式拆分行列,并将结果列表分配给 fips 和行列,如下所示:
import pandas as pd # Split the 'row' column into 'fips' and 'row' columns df[['fips', 'row']] = df['row'].str.split(r'(\d{5}) +', n=1, expand=True)
expand=True 参数为用于指定 str.split() 方法应返回具有多列的 DataFrame,而不是一系列
结果
执行上述代码后,我们的 DataFrame df 将如下所示:
fips row 0 00000 UNITED STATES 1 01000 ALABAMA 2 01001 Autauga County, AL 3 01003 Baldwin County, AL 4 01005 Barbour County, AL
使用的替代解决方案str.extract()
另一种分割行列的方法是使用 str.extract() 方法。此方法采用正则表达式作为参数,并返回一个包含正则表达式匹配项的 DataFrame。在我们的例子中,我们可以使用以下正则表达式:
r'(\d{5}) +\D+'
此正则表达式将匹配由五个数字组成的序列,后跟一个或多个非数字。然后,我们可以使用 str.extract() 方法提取此正则表达式的匹配项,并将生成的 DataFrame 分配给 fips 和 row 列,如下所示:
import pandas as pd # Split the 'row' column into 'fips' and 'row' columns df[['fips', 'row']] = df['row'].str.extract(r'(\d{5}) +\D+')
Result
执行上面的代码后,我们的DataFrame df将如下所示:
fips row 0 00000 UNITED STATES 1 01000 ALABAMA 2 01001 Autauga County, AL 3 01003 Baldwin County, AL 4 01005 Barbour County, AL
两者上述解决方案将达到所需的结果,将行列拆分为 fips 和行列。 str.split() 解决方案更加灵活,可以用于基于任何正则表达式来拆分列,而 str.extract() 解决方案更简单,更容易理解。
以上是如何将 Pandas DataFrame 字符串列拆分为两列?的详细内容。更多信息请关注PHP中文网其他相关文章!