【问题标题】:Split a panda column into text and numbers [duplicate]将熊猫列拆分为文本和数字[重复]
【发布时间】:2020-01-08 02:49:37
【问题描述】:

我正在尝试根据类型拆分列。我想显示与文本分开的数字。

我尝试过不带循环添加它,但形状不同。因此,我求助于循环播放。然而,它只给了我所有领域的最后一个数字

Python 输入:

newdf = pd.DataFrame()
newdf['name'] = ('leon','eurika','monica','wian')
newdf['surname'] = ('swart38','39swart','11swart','swart10')
a = newdf.shape[0]

newdf['age'] = ""
for i in range (0,a):
    newdf['age'] =  re.sub(r'\D', "",str(newdf.iloc[i,1]))

print (newdf)

我希望年龄列显示38,39,11,10。然而,答案是所有"10" 都是最后一个字段。

输出:

     name  surname age
0    leon  swart38  10
1  eurika  swart39  10
2  monica  11swart  10
3    wian  swart10  10

【问题讨论】:

  • 如果您将 newdf['age'] 替换为 newdf.loc[i, 'age'],您的代码将可以工作(尽管由于 for 循环,它不会非常高效)

标签: python-3.x pandas


【解决方案1】:

这是因为您在 for 循环的每次迭代中都为 newdf['age'] 分配了新值,其中最后一次分配是 10

你可以通过索引来修复它:

a = newdf.shape[0]
newdf['age'] = ""
for i in range (0,a):
    newdf['age'][i] =  re.sub(r'\D', "",str(newdf.iloc[i,1]))
    #           ^^^

或者,使用pandas.Series.str.extract:

newdf['age'] = newdf['surname'].str.extract('(\d+)')
print(newdf)

输出:

     name  surname age
0    leon  swart38  38
1  eurika  39swart  39
2  monica  11swart  11
3    wian  swart10  10

【讨论】:

    【解决方案2】:

    尝试使用Series.str.replace

    newdf['age'] = newdf['surname'].str.replace(r'\D+', '')
    

    【讨论】:

      猜你喜欢
      • 2015-11-20
      • 2018-07-26
      • 2019-12-28
      • 2020-03-21
      • 1970-01-01
      • 2018-10-17
      • 1970-01-01
      • 2016-08-30
      • 2018-12-04
      相关资源
      最近更新 更多