我有一个如下数据框:
df =
A B D
a1 b1 9052091001A
a2 b2 95993854906
a3 b3 93492480190
a4 b4 93240941993
我想要的是什么:
df_resp =
A B D
a1 b1 001A
a2 b2 4906
a3 b3 0190
a4 b4 1993
我尝试了什么:
for i in (0,len(df['D'])):
df['D'][i]= df['D'][i][-4:]
我得到的错误:
KeyError:4906
此外,它需要很长时间,我认为应该有更快的方式与熊猫。
答案 0 :(得分:1)
使用apply()
的{{1}}方法,它比使用pandas.Series
循环迭代更快......
这应该有效(如果列只包含字符串):
for
对于df_resp = df.copy()
df_resp['D'] = df_resp['D'].apply(lambda x : x[-4:])
,它可能来自您的DataFrame索引,因为调用KeyError
等同于df['D'][i]
,即df.loc[i]['D']
指的是索引& #39;标签,而不是它的位置。如果您用i
替换它,它可能(可能)有用,它引用位置df.loc[i]['D']
的索引。
我希望这有帮助!
答案 1 :(得分:1)
使用pd.Series.str
字符串访问器进行矢量化字符串操作。这些优于使用apply
。
如果D
元素已经是字符串
df.assign(D=df.D.str[-4:])
A B D
0 a1 b1 001A
1 a2 b2 4906
2 a3 b3 0190
3 a4 b4 1993
如果不是
df.assign(D=df.D.astype(str).str[-4:])
A B D
0 a1 b1 001A
1 a2 b2 4906
2 a3 b3 0190
3 a4 b4 1993
您可以使用
进行更改df['D'] = df.D.str[-4:]