假设我有一个数据框df
为
A B
1 V2
3 W42
1 S03
2 T02
3 U71
我希望有一个新列(在df
的末尾或者用它替换列B
,因为它无关紧要)只从列{{{1}中提取int 1}}。这就是我希望列B
看起来像
C
所以如果数字前面有一个0,比如03,那么我想返回3而不是03
我该怎么做?
答案 0 :(得分:43)
您可以转换为字符串并使用正则表达式提取整数。
df['B'].str.extract('(\d+)').astype(int)
答案 1 :(得分:2)
假设总有一个前导字母
df['B'] = df['B'].str[1:].astype(int)
答案 2 :(得分:0)
我写了一个小循环来做这件事,因为我没有在DataFrame中使用我的字符串,而是在列表中。这样,您还可以添加一个小if语句来考虑浮点数:
output= ''
input = 'whatever.007'
for letter in input :
try :
int(letter)
output += letter
except ValueError :
pass
if letter == '.' :
output += letter
output = float(输出)
或者如果你愿意,你可以int(输出)。
答案 3 :(得分:0)
准备与您的DF相同的DF:
df = pd.DataFrame({'A': [1, 3, 1, 2, 3], 'B' : ['V2', 'W42', 'S03', 'T02', 'U71']})
df.head()
现在进行操作以获得所需的结果:
df['C'] = df['B'].apply(lambda x: re.search(r'\d+', x).group())
df.head()
A B C
0 1 V2 2
1 3 W42 42
2 1 S03 03
3 2 T02 02
4 3 U71 71
答案 4 :(得分:0)
如果您不想使用正则表达式,这是另一种方法:
我使用map()
函数将所需的内容应用于列的每个元素。
像这样:
letters = "abcdefghijklmnopqrstuvwxyz"
df['C'] = list(map(lambda x: int(x.lower().strip(letters)) , df['B']))
输出将如下所示:
答案 5 :(得分:0)
首先设置数据
df = pd.DataFrame({'A': [1, 3, 1, 2, 3], 'B' : ['V2', 'W42', 'S03', 'T02', 'U71']})
df.head()
然后进行提取并将其转换回整数
df['C'] = df['B'].str.extract('(\d+)').astype(int)
df.head()