我有一个定义为df的数据框。 我试图通过复制名为FullName的列来创建名为partialName的新列,但只获取由名为length的不同列定义的特定数量的字符(包括空格)。
*fullName*
EPA Office
Defense1 Info
*length*
6
8
我希望获得新专栏
*partialName*
EPA Of
Defense1
我尝试使用
x = df['length']
df['partialName'] = df['fullName'].str[:x]
但这不起作用,如果我用特定的数字替换X然后它会返回那么多字符,但对我来说数字会有所不同。 什么是实现这一目标的最佳方式?
答案 0 :(得分:1)
看起来您缺少值,以下内容适用于我:
In [21]:
df = pd.DataFrame({'fullName':['EPA Office','Defense1 Info','duff'] , 'length':[6,8,np.NaN]})
df
Out[21]:
fullName length
0 EPA Office 6
1 Defense1 Info 8
2 duff NaN
In [24]:
df['partialName'] = df[df['length'].notnull()].apply(lambda row: row['fullName'][:int(row['length'])] , axis=1)
df
Out[24]:
fullName length partialName
0 EPA Office 6 EPA Of
1 Defense1 Info 8 Defense1
2 duff NaN NaN
所以在这里我们使用apply
并传递一个带有param axis=1
的lambda来逐行操作以使用length值来切割字符串,另外因为你有缺少的值,所以dtype可能是{{ 1}}所以我们需要屏蔽掉缺少的值并将长度值转换为int