熊猫索引StringMethods丢失索引

时间:2019-07-10 09:47:51

标签: python pandas

我刚刚注意到,对Pandas DataFrame的索引进行的字符串操作无法维护索引,因此将结果分配回该数据帧有点尴尬。例如(以及我注意到的情况):

import pandas as pd

df = pd.DataFrame(
  [[1,2],[3,4],[5,6]],
  index=['a11','b12','c13'])

df['num'] = df.index.str.extract('([0-9]+)')

给我:

     0  1  num
a11  1  2  NaN
b12  3  4  NaN
c13  5  6  NaN

由于索引已丢失,只是恢复为[0,1,2]

花了一些调试才能意识到此索引丢失是我得到NaN的原因,但是一旦完成,很明显我可以做:

df['num'] = df.index.str.extract('([0-9]+)').set_index(df.index)

这是对的,还是有其他方法可以维护索引?

3 个答案:

答案 0 :(得分:1)

如何使用assign

df.assign(num=df.index.str.extract('([0-9]+)').values)

答案 1 :(得分:1)

您可以使用expand命令来获得与您相同的期望结果,

df['num'] = df.index.str.extract('([0-9]+)', expand=False)

expand=False返回序列或索引或数据框,因为只有一个提取组,所以可以使用expand参数。

答案 2 :(得分:1)

您将不得不使用expand参数:

df['num'] = df.index.str.extract('([0-9]+)', expand=False)

来自docs

  

展开:布尔值,默认为True

     

如果为True,则返回每个捕获组只有一列的DataFrame。如果为False,则如果有一个捕获组,则返回一个Series / Index或   如果有多个捕获组,则为DataFrame。

     

0.18.0版中的新功能。