pandas使用技巧【8】使用str方法,使用字符串操作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pandas使用技巧【8】使用str方法,使用字符串操作相关的知识,希望对你有一定的参考价值。

参考技术A

pandas string handling API链接🔗

使用矢量化的str方法
(1)str.upper()
将字符串的字符转化为大写,对应的还有lower()方法。

(2)str.contains()
返回boolean Series

(3)str.replace()

(4)str.strip()
去除空白符,包括换行符。对应的还有lstrip(),rstrip()。

map用于映射,可以通过此方法生成新的列,如下。

附上小哥哥的视频链接Data analysis in Python with pandas
Youtube 🔗
哔哩哔哩 🔗

所有文章列表
pandas使用技巧总览

使用 pandas str.find 方法对数据框列中的字符串进行切片

【中文标题】使用 pandas str.find 方法对数据框列中的字符串进行切片【英文标题】:using pandas str.find method to slice strings in dataframe column 【发布时间】:2017-10-08 04:28:29 【问题描述】:

我有一个数据框列,看起来像这样:

s = pd.Series(["a0a1a3", "b1b3", "c1c1c3c3"], index=["A", "B", "C"])

我可以找到 str.find 方法在每个单元格中找到我想要的索引:

s.str.find('1').values
array([3, 1, 1])
s.str.find('3').values
array([5, 3, 5])

但是我找不到如何使用这些函数来剪切该列中的字符串。例如:

s.str[s.str.find('1').values:s.str.find('3').values].values

给予

array([ nan,  nan,  nan])

结合这些功能的正确方法是什么?

【问题讨论】:

请发布您想要的数据集 - 不太清楚您想要实现什么 请阅读how to make good reproducible pandas examples并相应地编辑您的帖子。 pandas 在其直观性上的实现非常非常糟糕 【参考方案1】:

这是你想要的吗?

In [87]: s.str.split('1').str[0]
Out[87]:
A    a
B    b
C    c
dtype: object

In [88]: s.str.split('1').str[1]
Out[88]:
A    a2
B    b2
C    c2
dtype: object

In [89]: s.str.split('1', expand=True)
Out[89]:
   0   1
A  a  a2
B  b  b2
C  c  c2

你会在official Pandas docs site找到很多有用的例子

更新:

In [203]: s = pd.Series(["a1a2", "b1b2", "c1c2", "aaaaaa1XX"], index=["A", "B", "C", "D"])

In [204]: s
Out[204]:
A         a1a2
B         b1b2
C         c1c2
D    aaaaaa1XX
dtype: object

In [205]: s.str.split('1', expand=True)
Out[205]:
        0   1
A       a  a2
B       b  b2
C       c  c2
D  aaaaaa  XX

更新2:

In [224]: s
Out[224]:
A      a0a1a3
B        b1b3
C    c1c1c3c3
dtype: object

In [225]: s.str.extract(r'1(.*?)3', expand=False)
Out[225]:
A      a
B      b
C    c1c
dtype: object

注意:请始终发布源数据集和所需数据集 - 否则我们必须猜测您要达到什么目的......

【讨论】:

非常感谢您的回复,但事实并非如此:在这种情况下,您知道“1”字符串在所有单元格的同一索引中。如果不是,你会怎么做? @Delosari,它也能正常工作 - 查看更新的答案 ;-) 再次感谢。我可以设法使用你给我的东西,但我想知道是否还有另一种方法:在你的方法中,你每次都切割列系列以获得你想要的部分。但我自己想使用“.find”方法来找到我需要分割字符串的索引。有没有办法在“.str[idxInidial:idxFinal]”结构中使用“.find”中的索引 @Delosari,很可能这是可能的,但这不是惯用的方法,而且看起来很难看。 Python Zen 的第三条规则说 - "Simple is better than complex." 我已更新问题以获得更好的描述

以上是关于pandas使用技巧【8】使用str方法,使用字符串操作的主要内容,如果未能解决你的问题,请参考以下文章

Pandas处理dataframe的文本数据列:使用str属性获取数据列的字符串方法类rstrip函数移除(删除)字符串数据列所有内容右侧的空格字符

Pandas处理dataframe的文本数据列:使用str属性获取数据列的字符串方法类lstrip函数移除(删除)字符串数据列所有内容左侧的空格字符

Pandas处理dataframe的文本数据列:使用str属性获取数据列的字符串方法类lstrip函数移除(删除)字符串数据列所有内容左侧的空格字符

Pandas处理dataframe的文本数据列:使用str属性获取数据列的字符串方法类contains函数判断数据列是否包含指定字符串生成布尔值序列

Pandas处理dataframe的文本数据列:使用str属性获取数据列的字符串方法类upper函数将指定字符串数据列内容转化为大写字符(upper case)

Pandas处理dataframe的文本数据列:使用str属性获取数据列的字符串方法类lower函数将指定字符串数据列内容转化为小写字符(lower case)