我有一个带有一列的数据框,我想将它分成两列,一列的标题是'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
也许有更好的方法,但这里有一种方法:
您可以使用regex模式非常灵活地extract出不同的部分:
要解释有点长的regex:
\d
),并将它们命名为"fips"
。下一部分:
做两件事中的任何一件:
*
)的大写字母或空格([A-Z ]
),并在字符串结尾($
)之前将其命名为"state"
或者
.*
)然后$
)之前的两位数state_code
。在示例中:
注意,前两行命中“state”(将NaN留在county和state_code列中),而最后三行命中county和state_code(将NaN留在state列中)。
TL;DR版本:
对于以下简单情况:
最简单的解决方案是:
或者,可以创建一个数据框,其中每个拆分条目都有一列,并自动使用:
如果字符串的拆分数不一致,并且希望
None
替换丢失的值,则必须使用expand=True
。注意,在这两种情况下,
.tolist()
方法都是不必要的。也不是zip()
。详细说明:
Andy Hayden's solution在演示^{} 方法的威力方面最为出色。
但是对于在已知分隔符上的简单拆分(例如,用破折号拆分或用空白拆分),使用^{} 方法就足够了。它对字符串的列(序列)进行操作,并返回列表的列(序列):
1:如果您不确定
.str.split()
的前两个参数的作用, 我推荐plain Python version of the method的文档。但你如何从:
致:
好吧,我们需要更仔细地看一下列的
.str
属性。它是一个神奇的对象,用于收集将列中的每个元素视为字符串的方法,然后尽可能高效地在每个元素中应用相应的方法:
但它也有一个“索引”接口,用于按索引获取字符串的每个元素:
当然,
.str
的这个索引接口并不真正关心它所索引的每个元素是否实际上是一个字符串,只要它可以被索引,那么:那么,利用iterables的Python元组解包就很简单了
当然,从拆分字符串列中获取数据帧非常有用,因此
.str.split()
方法可以使用expand=True
参数为您执行此操作:所以,实现我们梦想的另一种方式是:
虽然
expand=True
版本较长,但与元组解包方法相比有明显的优势。元组解包不能很好地处理不同长度的拆分:但是
expand=True
通过在没有足够“拆分”的列中放置None
来很好地处理它:相关问题 更多 >
编程相关推荐