Pandas的FutureWarning:在未来版本中,字符的列迭代将被弃用。

14

我有一个现有的解决方案,可以将一个只有一列的数据框拆分成两列。

df['A'], df['B'] = df['AB'].str.split(' ', 1).str

最近,我收到了以下警告 FutureWarning: Columnar iteration over characters will be deprecated in future releases.

如何解决这个警告?

我正在使用python 3.7


相关:https://dev59.com/jmUq5IYBdhLWcg3wJNLg - Jeff
2个回答

23

这并不完全正确,另外末尾的.str没有意义。因为splitexpand一起返回一个DataFrame,所以这样更容易:

这并不是完全正确的,而且末尾的.str没有意义。由于使用splitexpand可以返回一个DataFrame,所以这样更简单:

df[['A', 'B']] = df['AB'].str.split(' ', n=1, expand=True)

您现有的方法没有使用 expand,它返回一个包含列名列表的单个 Series。我不确定您在编写代码时使用了哪个版本的 pandas,但据我所知,如果要在当前的 pandas(>= 1.0)中使其正常工作,您需要进行一些调整。以这种方式进行赋值比较繁琐,但仍然是可能的。

s = df['AB'].str.split(' ', n=1)
df['A'], df['B'] = s.str[0], s.str[1]

我更喜欢使用expand解决方案,因为它比较短。


如果我的数据框有超过两列,第一个答案还有效吗?也就是说,使用df[['a','b']]会丢失其余的列吗? - Topde
在pandas 0.16之前,尾随的str方法是我所知道的主要方法,因此现在可能有很多代码收到了这个警告。 - Corvus

3

或者我们这样做

df['A'], df['B']=zip(*df['AB'].str.split(' ').tolist())
df
    AB  A  B
0  A B  A  B
1  A B  A  B
2  A B  A  B
3  A B  A  B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接