我有一个带有一个(字符串)列的数据帧,我想将其拆分为两个(字符串)列,其中一个列标题为“fips'
”,另一个为'row'
我的数据帧df
如下所示:
row
0 00000 UNITED STATES
1 01000 ALABAMA
2 01001 Autauga County, AL
3 01003 Baldwin County, AL
4 01005 Barbour County, AL
我不知道如何使用df.row.str[:]
来实现拆分行单元格的目标。我可以使用df['fips'] = hello
添加一个新列,并用hello
填充它。有什么想法吗
fips row
0 00000 UNITED STATES
1 01000 ALABAMA
2 01001 Autauga County, AL
3 01003 Baldwin County, AL
4 01005 Barbour County, AL
也许有更好的方法,但这里有一种方法:
您可以使用正则表达式模式extract非常整齐地将不同部分输出:
要解释有点长的正则表达式:
\d
),并将它们命名为"fips"
李>下一部分:
做两件事之一(
|
):*
)的大写字母或空格([A-Z ]
),并在字符串($
)结尾之前将此"state"
命名或
.*
),然后$
)结尾前的两位state_code
李>在示例中:
请注意,前两行显示的是“州”(在“县”和“州代码”列中保留NaN),而后三行显示的是“县”和“州代码”(在“州”列中保留NaN)
TL;DR版本:
对于以下简单情况:
最简单的解决方案是:
如果字符串的拆分数目不一致,并且希望
None
替换缺少的值,则必须使用expand=True
请注意,在这两种情况下,
.tolist()
方法都不是必需的。两者都不是详细内容:
Andy Hayden's solution在证明^{} 方法的威力方面最为出色
但是对于已知分隔符上的简单拆分(例如,用破折号拆分或用空格拆分),使用^{} 方法就足够了1。它对字符串列(系列)进行操作,并返回列表列(系列):
1:如果您不确定
.str.split()
的前两个参数的作用, 我推荐plain Python version of the method的文档。但你如何从:
致:
好的,我们需要更仔细地看一下列的
.str
属性它是一个神奇的对象,用于收集将列中的每个元素视为字符串的方法,然后在每个元素中尽可能高效地应用相应的方法:
但它也有一个“索引”接口,用于通过索引获取字符串的每个元素:
当然,
.str
的这个索引接口并不关心它所索引的每个元素是否实际上是一个字符串,只要它可以被索引,因此:然后,只需利用iterables的Python元组解包就可以了
当然,从拆分字符串列中获取数据帧非常有用,因此
.str.split()
方法可以使用expand=True
参数为您完成这项工作:因此,实现我们想要的另一种方式是:
expand=True
版本虽然较长,但与元组解包方法相比具有明显的优势。元组解包不能很好地处理不同长度的拆分:但是
expand=True
通过将None
放在没有足够“拆分”的列中,可以很好地处理它:相关问题 更多 >
编程相关推荐