栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python

对于以下简单情况:

我有一个带有定界符的文本列,我想要两列
最简单的解决方案是:

df['A'], df['B'] = df['AB'].str.split(' ', 1).str

或者,你可以使用以下方法自动为拆分的每个条目创建一个带有一列的Dataframe:

df['AB'].str.split(' ', 1, expand=True)

expand=True
如果字符串的分割数不一致,并且要None替换缺失的值,则必须使用。

请注意,无论哪种情况,

.tolist()
都不需要该方法。都不是
zip()

详细地:

安迪·海登

(Andy Hayden)
的解决方案最能证明该str.extract()方法的强大功能。

但是对于在已知分隔符上的简单拆分(例如,用破折号拆分或通过空格拆分),该.str.split()方法就足够了1。它对字符串的一列(系列)进行操作,并返回列表的一列(系列):

>>> import pandas as pd>>> df = pd.Dataframe({'AB': ['A1-B1', 'A2-B2']})>>> df      AB0  A1-B11  A2-B2>>> df['AB_split'] = df['AB'].str.split('-')>>> df      AB  AB_split0  A1-B1  [A1, B1]1  A2-B2  [A2, B2]

1:如果不确定

.str.split()do
的前两个参数是什么,我建议为该方法的纯Python版本使用docs 。

但是你如何去做:

  • 包含两个元素的列表的列
    至:

  • 两列,每列包含列表的相应元素?

好吧,我们需要仔细看看.str列的属性。

这是一个神奇的对象,用于收集将列中的每个元素视为字符串的方法,然后在每个元素中尽可能有效地应用相应的方法:

>>> upper_lower_df = pd.Dataframe({"U": ["A", "B", "C"]})>>> upper_lower_df   U0  A1  B2  C>>> upper_lower_df["L"] = upper_lower_df["U"].str.lower()>>> upper_lower_df   U  L0  A  a1  B  b2  C  c

但是它还有一个“索引”接口,用于通过其索引获取字符串的每个元素:

>>> df['AB'].str[0]0    A1    AName: AB, dtype: object>>> df['AB'].str[1]0    11    2Name: AB, dtype: object

当然,.str只要可以对其建立索引,则此索引接口并不真正在乎它所索引的每个元素是否实际上是字符串,因此:

>>> df['AB'].str.split('-', 1).str[0]0    A11    A2Name: AB, dtype: object>>> df['AB'].str.split('-', 1).str[1]0    B11    B2Name: AB, dtype: object

然后,只需利用Python元组对可迭代对象进行拆包即可

>>> df['A'], df['B'] = df['AB'].str.split('-', 1).str>>> df      AB  AB_split   A   B0  A1-B1  [A1, B1]  A1  B11  A2-B2  [A2, B2]  A2  B2

当然,从拆分一列字符串中获取一个Dataframe非常有用,以至于该.

str.split()
方法可以通过
expand=True
参数为你做到这一点:

>>> df['AB'].str.split('-', 1, expand=True)    0   10  A1  B11  A2  B2

因此,完成我们想要的工作的另一种方法是:

>>> df = df[['AB']]>>> df      AB0  A1-B11  A2-B2>>> df.join(df['AB'].str.split('-', 1, expand=True).rename(columns={0:'A', 1:'B'}))      AB   A   B0  A1-B1  A1  B11  A2-B2  A2  B2

该expand=True版本虽然较长,但与元组拆包方法相比具有明显的优势。元组解压缩不能很好地处理不同长度的拆分:

>>> df = pd.Dataframe({'AB': ['A1-B1', 'A2-B2', 'A3-B3-C3']})>>> df         AB0     A1-B11     A2-B22  A3-B3-C3>>> df['A'], df['B'], df['C'] = df['AB'].str.split('-')Traceback (most recent call last):  [...]    ValueError: Length of values does not match length of index>>> 

但是expand=True通过放置None没有足够“拆分”的列来很好地处理它:

>>> df.join(...     df['AB'].str.split('-', expand=True).rename(...         columns={0:'A', 1:'B', 2:'C'}...     )... )         AB   A   B     C0     A1-B1  A1  B1  None1     A2-B2  A2  B2  None2  A3-B3-C3  A3  B3    C3


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/379236.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号