Remove ends of string entries in pandas DataFrame column

前端 未结 4 1159
盖世英雄少女心
盖世英雄少女心 2020-12-30 05:35

I have a pandas Dataframe with one column a list of files

import pandas as pd
df = pd.read_csv(\'fname.csv\')

df.head()

filename    A    B    C
fn1.txt   2         


        
相关标签:
4条回答
  • 2020-12-30 06:04

    I think you can use str.replace with regex .txt$' ( $ - matches the end of the string):

    import pandas as pd
    
    df = pd.DataFrame({'A': {0: 2, 1: 1}, 
                       'C': {0: 5, 1: 1}, 
                       'B': {0: 4, 1: 2}, 
                       'filename': {0: "txt.txt", 1: "x.txt"}}, 
                    columns=['filename','A','B', 'C'])
    
    print df
      filename  A  B  C
    0  txt.txt  2  4  5
    1    x.txt  1  2  1
    
    df['filename'] = df['filename'].str.replace(r'.txt$', '')
    print df
      filename  A  B  C
    0      txt  2  4  5
    1        x  1  2  1
    
    df['filename'] = df['filename'].map(lambda x: str(x)[:-4])
    print df
      filename  A  B  C
    0      txt  2  4  5
    1        x  1  2  1
    
    df['filename'] = df['filename'].str[:-4]
    print df
      filename  A  B  C
    0      txt  2  4  5
    1        x  1  2  1
    

    EDIT:

    rstrip can remove more characters, if the end of strings contains some characters of striped string (in this case ., t, x):

    Example:

    print df
      filename  A  B  C
    0  txt.txt  2  4  5
    1    x.txt  1  2  1
    
    df['filename'] = df['filename'].str.rstrip('.txt')
    
    print df
      filename  A  B  C
    0           2  4  5
    1           1  2  1
    
    0 讨论(0)
  • 2020-12-30 06:04

    You may want:

    df['filename'] = df.apply(lambda x: x['filename'][:-4], axis = 1)

    0 讨论(0)
  • 2020-12-30 06:09

    You can use str.rstrip to remove the endings:

    df['filename'] = df['filename'].str.rstrip('.txt')
    

    should work

    0 讨论(0)
  • 2020-12-30 06:12

    use list comprehension

    df['filename'] = [x[:-4] for x in df['filename']]
    
    0 讨论(0)
提交回复
热议问题