根据长度从字符串中删除最后一位

时间:2019-09-04 22:00:26

标签: python python-3.x pandas

如果字符串超过5位,我将尝试删除df [4]字符串中的最后一位数字。

我尝试将.str [:-1]添加到df [4] = df [4] .astype(str),这会删​​除数据帧中每个字符串的最后一位。

df[3]=df[3].astype(str)
df[4]=df[4].astype(str).str[:-1]
df[5]=df[5].astype(str)

我尝试了几种不同的if语句组合,但是没有一个奏效。 我是python和pandas的新手,所以对您的帮助表示赞赏

3 个答案:

答案 0 :(得分:1)

您可以先根据字符串长度进行过滤:

condition = df[4].astype(str).str.len() > 5
df.loc[condition, 4]=df.loc[condition, 4].astype(str).str[:-1]

例如:

>>> df
           4
0          1
1         11
2        111
3       1111
4      11111
5     111111
6    1111111
7   11111111
8  111111111
>>> condition = df[4].astype(str).str.len() > 5
>>> df.loc[condition, 4]=df.loc[condition, 4].astype(str).str[:-1]
>>> df
          4
0         1
1        11
2       111
3      1111
4     11111
5     11111
6    111111
7   1111111
8  11111111

如果这些是自然整数,则除以10会更有效:

condition = df[4].astype(str).str.len() > 5
df.loc[condition, 4]=df.loc[condition, 4] // 10

答案 1 :(得分:0)

访问集合元素

>>> x = "123456"

# get element at index from start
>>> x[0]
'1'

# get element at index from end
>>> x[-1]
'6'

# get range of elements from n-index to m-index
>>> x[0:3]
'123'
>>> x[1:-2]
'234'
>>> x[-4:-2]
'34'

# get range from/to index with open end/start
>>> x[:-2]
'1234'
>>> x[4:]
'56'

列表理解语法

我还没有看到pythons list comprehension syntax真的很酷很容易。

# input data frame with variable string length 1 to n
df = [
    'a',
    'ab',
    'abc',
    'abcd',
    'abcdf',
    'abcdfg',
    'abcdfgh',
    'abcdfghi',
    'abcdfghij',
    'abcdfghijk',
    'abcdfghijkl',
    'abcdfghijklm'
]

# using list comprehension syntax: [element for element in collection]
df_new = [
    # short hand if syntax: value_a if True else value_b
    r if len(r) <= 5 else r[0:5] 
    for r in df 
]

现在df_new仅包含长度为5的字符串:

[
 'a',
 'ab',
 'abc',
 'abcd',
 'abcdf',
 'abcdf',
 'abcdf',
 'abcdf',
 'abcdf',
 'abcdf',
 'abcdf',
 'abcdf'
]

答案 2 :(得分:-1)

因为[-1]删除了最后一个数字或将数字更改为-1 尝试str df[4]=-1