我有一个数据帧列,我想从字符串中删除最后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
进行检查。