如何在python中修剪一系列字符串对象?
是否有任何方法可以在不使用for循环的情况下修剪一系列字符串对象。我可以一个元素一个元素地做这个。我有一个系列如何在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',
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)