首页 > 解决方案 > 将熊猫列拆分为文本和数字

问题描述

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

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

蟒蛇输入:

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

标签: python-3.xpandas

解决方案


newdf['age']这是因为您在循环的每次迭代中都分配了新值for,其中最后一次分配是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

推荐阅读