如何在python中修剪一系列字符串对象?

如何在python中修剪一系列字符串对象?,python,pandas,strip,Python,Pandas,Strip,是否有任何方法可以在不使用for循环的情况下修剪一系列字符串对象。我可以一个元素一个元素地做这个。我有一个系列a print a 0 164 1 164 2 164 3 164 4 164 5 164 现在我必须删除每个“164”开头的空格。 a.strip()导致AttributeError:'Series'对象没有属性'strip' 感谢您的帮助。使用str.strip删除空格: df = pd.DataFrame({'a': ['164',

是否有任何方法可以在不使用for循环的情况下修剪一系列字符串对象。我可以一个元素一个元素地做这个。我有一个系列
a

print a
0    164
1     164
2     164
3     164
4     164
5     164
现在我必须删除每个“164”开头的空格。
a.strip()
导致
AttributeError:'Series'对象没有属性'strip'

感谢您的帮助。

使用
str.strip
删除空格:

df = pd.DataFrame({'a': ['164', ' 164', '    164']})
for item in df.a:
    print (len(item))
3
4
7
In [11]:

df.a = df.a.str.strip(' ')
for item in df.a:
    print (len(item))
3
3
3
要转换为整数,请执行以下操作:

In [20]:

df.a = df.a.astype(int)
df.dtypes

Out[20]:
a    int32
dtype: object

您的数据或代码没有问题,但是请彻底检查数据,即使其中一行没有正确的数据,并且您正在尝试为给定范围转换一个系列的特定列类型,但整个系列都在考虑之中,因此您的问题就出现了


减少测试集并检查几行,它应该可以正常工作。

我从未使用过pandas,但如果我理解正确,您可能希望执行类似操作

from pandas import DataFrame
df = DataFrame({'a': ['164', ' 165']})
for index, row in df.iterrows():  
    print int(row['a'])

很抱歉,如果我偏离主题:-)

如果您只需要将其转换为int,那么只需
df[0].astype(int)
如何


应使用正则表达式:

import re

trim_function = lambda x : re.findall("^\s*(.*?)\s*$",str(x))[0]
解释一下:

  • 字符
    ^
    表示字符串的开头,
    $
    表示字符串的结尾;这样,您的表达式将恰好找到1个匹配项

  • \s
    表示任何空白字符。因此,
    \s*
    是任何空格序列(甚至是空的)

  • *?
    是任何字符的任意序列。我无法解释确切的原因,但是
    符号让这个支出比
    \s*
    更少贪婪,因此空格将被计算在括号外

  • 最后,parethesis
    (…)
    意味着您位于其中的子字符串中:表达式修剪

由于
re.findall
提供了匹配子字符串的列表,我们必须选择第一个元素

现在,对于数据帧:

df = pd.DataFrame([' 164', '164', '164 ', '  164  '])
df.applymap(trim_function)
连续剧

df = pd.Series([' 164', '164', '164 ', '  164  '])
df.apply(trim_function)
索引

df = pd.Index([' 164', '164', '164 ', '  164  '])
df.map(trim_function)

编辑:忘记:如果您不想删除每个字符串末尾的空格,只需使用模式
“^\s*(.*)”

我不明白您想做什么。你能告诉我们在这个具体的例子中你想要得到的字符串吗?我想把它们转换成int类型,这是我第一次尝试的。数据有点问题。我必须在多个文件中分解数据,这样我才能看到问题所在。谢谢你的邀请ans@sau您使用的熊猫是什么版本的
pd.version。如果您不立即知道熊猫版本0.10,version
将输出该版本。1@sau不确定是什么问题,你能升级到0.13吗?我正在研究字符串,因为astype(int)不工作,所以我认为数据本身有问题,我还没有弄清楚。
df = pd.Index([' 164', '164', '164 ', '  164  '])
df.map(trim_function)