Python 有没有一种快速的方法可以从数据帧中一列中的所有行中去掉一个特定的字符?

Python 有没有一种快速的方法可以从数据帧中一列中的所有行中去掉一个特定的字符?,python,pandas,Python,Pandas,我正试图从一个专栏中删除日期,使之成为一个新的专栏。我写了一个函数来实现它,但我不知道如何将它应用到pandas框架中 以下是原始df: ID var1 var2 abc_20190503_xyz 100 10 fds_20190503_fnk 234 32 ree_20190503_fds 555 23 我编写了以下函数: def strip_date(pid,file_dat

我正试图从一个专栏中删除日期,使之成为一个新的专栏。我写了一个函数来实现它,但我不知道如何将它应用到pandas框架中

以下是原始df:

ID                       var1   var2 
abc_20190503_xyz         100    10
fds_20190503_fnk         234    32
ree_20190503_fds         555    23
我编写了以下函数:

def strip_date(pid,file_date):
    pid=list(pid)
    pid.remove(file_date)
    return ''.join(pid)

file_date='20190503'
org_df['NewID']=strip_date(org_df['ID'],file_date)
org_df
问题:

这给了我错误消息:list.removex:x不在列表中 似乎我当前的def只删除了字符串中的一个文件\ u日期;如果有多个,我必须重新洗漱。e、 g.如果id为“abc_20190503_xyz_20190503”,则仅删除第一个。有更好的解决办法吗? 所需输出:

New ID             ID                    var1   var2 
abc__xyz         abc_20190503_xyz         100    10
fds__fnk         fds_20190503_fnk         234    32
ree__fds         ree_20190503_fds         555    23
另外,我想使用新ID作为索引。

您可以使用正则表达式从ID列中提取所有数字

df['New_ID'] = df['ID'].str.replace('([0-9]+)', '')
您可以使用正则表达式从ID列中提取所有数字

df['New_ID'] = df['ID'].str.replace('([0-9]+)', '')
拆分然后加入任何不是数字的内容。这将在其余部分之间留下一个单独的“u2;”,并且不会留下前导或尾随“2;”

只有可以完全转换为数字的段才会被删除,而不是所有的数字。如果只需要为单个指定日期执行此操作,则可以将检查更改为“如果y!=”20190503'

拆分,然后加入任何不是数字的内容。这将在其余部分之间留下一个单独的“u2;”,并且不会留下前导或尾随“2;”


只有可以完全转换为数字的段才会被删除,而不是所有的数字。如果只需要为单个指定日期执行此操作,则可以将检查更改为“如果y!=”20190503'

df.ID.str.replace'20190503',日期总是一样吗?或者是否有多个?日期始终相同,但需要作为文件_date传入。是否确实要在输出中使用带有多个日期下划线的两倍或三倍?df.ID.str.replace'20190503',日期是否始终相同?或者有多个?日期总是相同的,但需要作为文件_date传入。您真的希望输出中有多个日期下划线的双精度或三精度吗?我可能会将正则表达式中的+更改为{8},以防日期的左右两侧有任何数字。我可能会将正则表达式中的+更改为{8}以防日期的左右两边都有数字。
df['New_ID'] = ['_'.join([y for y in x if not y.isdigit()]) for x in df.ID.str.split('_')]

                          ID  var1  var2     New_ID
0           abc_20190503_xyz   100    10    abc_xyz
1           fds_20190503_fnk   234    32    fds_fnk
2           ree_20190503_fds   555    23    ree_fds
3  abc_20190503_xyz_20190503    17    22    abc_xyz
4         abc_20190503_xy10z   100    10  abc_xy10z