【问题标题】:Pandas: get second character of the string, from every rowPandas:从每一行获取字符串的第二个字符
【发布时间】:2015-01-17 04:46:54
【问题描述】:

我在 Pandas 中有一个数据数组,我正在尝试打印 col1 中每个字符串的第二个字符。我不知道该怎么做。我可以轻松地单独打印每个字符串的第二个字符,例如:

array.col1[0][1]

但是我想打印每一行的第二个字符,所以会有一个第二个字符的“列表”。

我试过了

array.col1[0:][1]

但这只是将第二行作为一个整体返回 col1。

有什么建议吗?

【问题讨论】:

    标签: python string pandas dataframe character


    【解决方案1】:

    您可以使用str 访问列/系列的字符串方法,然后照常对字符串进行切片:

    >>> df = pd.DataFrame(['foo', 'bar', 'baz'], columns=['col1'])
    >>> df
      col1
    0  foo
    1  bar
    2  baz
    
    >>> df.col1.str[1]
    0    o
    1    a
    2    a
    

    str 属性还使您可以访问各种非常有用的向量化字符串方法,其中许多可以从 Python 自己的各种内置字符串方法(splitreplace 等)中立即识别。

    【讨论】:

      【解决方案2】:

      从 Pandas 0.23.0 开始,如果您的数据是干净的,您会发现通过 pd.Series.str 的 Pandas“矢量化”字符串方法通常表现不佳通过列表理解或使用 @987654323 进行简单迭代@。

      例如:

      from operator import itemgetter
      
      df = pd.DataFrame(['foo', 'bar', 'baz'], columns=['col1'])
      
      df = pd.concat([df]*100000, ignore_index=True)
      
      %timeit pd.Series([i[1] for i in df['col1']])            # 33.7 ms
      %timeit pd.Series(list(map(itemgetter(1), df['col1'])))  # 42.2 ms
      %timeit df['col1'].str[1]                                # 214 ms
      

      一种特殊情况是当您有大量重复的字符串时,在这种情况下,您可以从将您的系列转换为 categorical 中受益:

      df['col1'] = df['col1'].astype('category')
      
      %timeit df['col1'].str[1]  # 4.9 ms
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-11
        • 2014-06-08
        • 2015-05-21
        • 2020-02-14
        • 2017-09-24
        相关资源
        最近更新 更多