获取对象列的最后一个字符并使其成为数据帧上的列

2024-04-25 19:05:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有如下数据帧:

数据框=

A   B   D
a1  b1  9052091001A
a2  b2  95993854906
a3  b3  93492480190
a4  b4  93240941993

我想要的是:

数据框响应=

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

而且,这需要很长时间,我认为应该有一个更快的方法来对付熊猫。你知道吗


Tags: 数据ina2dfforlena1错误
2条回答

使用^{}字符串访问器进行矢量化字符串操作。与使用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:]

使用pandas.Seriesapply()方法,它将比使用for循环进行迭代快得多。。。你知道吗

这应该有效(前提是列仅包含字符串):

df_resp = df.copy()
df_resp['D'] = df_resp['D'].apply(lambda x : x[-4:])

至于KeyError,它可能来自数据帧的索引,因为调用df['D'][i]等同于df.loc[i]['D'],即i指的是索引的标签,而不是它的位置。如果用df.loc[i]['D']替换它(可能)会起作用,它引用位于i位置的索引。你知道吗

我希望这有帮助!你知道吗

相关问题 更多 >