类型错误:"float"对象在从字符串中删除最后 3 个字符时不可下标



我有一个数据帧列,我想从字符串中删除最后3个字符:将"1996-09-27 00:00:00+10"更改为"1996-09--27 00:00:00'

我可以将df['col'][0][:-3]用于单个字符串,但从df['col'] = df['col'].apply(lambda x: x[:-3])接收到TypeError: 'float' object is not subscriptable

我想原因是列col同时包含浮点值和字符串值。

例如,如果您的数据帧如下:

df = pd.DataFrame({'col':['1996-09-27 00:00:00+10','1996-09-27 0000:00+11', 1000.5]})

删除最后3个字符将引发异常:

TypeError: 'float' object is not subscriptable

解决方案是在应用字符串操作之前将所有值强制转换为字符串。

df['col'] = df['col'].astype(str).apply(lambda l: l[:-3])

如果列都是字符串,则可以执行:

df = pd.DataFrame({'col':['1996-09-27 00:00:00+10','1996-09-27 0000:00+11']})
df['col'].replace("[+][0-9]*","",regex=True)
0    1996-09-27 00:00:00
1    1996-09-27 00:00:00

我的正则表达式不是很好,但[+]部分搜索的模式是"+"后面跟有0个或多个数字的符号。

我运行完全相同的代码,但它运行时没有错误:

df = pd.DataFrame({'col':['1996-09-27 00:00:00+10','1996-09-27 0000:00+11']})
df['col'] = df['col'].apply(lambda x: x[:-3])

输出df['col']:

0 1996-09-27 00:00:00
1 1996-09-27 0000:00

我的猜测是:也许df['col']的类型是float而不是string?您可以使用df['col'].dtypes进行检查。

最新更新