【问题标题】:vectorized string manipulation in pandas dataframe熊猫数据框中的矢量化字符串操作
【发布时间】:2015-11-10 07:39:08
【问题描述】:

我有一个大的 DataFrame,类似于

import pandas as pd

sqldate = pd.Series(["2014-0-1", "2015-10-10", "1990-23-2"])
pdf = pd.Series(["2014.pdf", "2015.pdf", "1999.pdf"])

df = pd.DataFrame({"sqldate":sqldate, "pdf": pdf})

我想创建一个布尔列,指示 sqldate 的年份是否与 pdf 名称的年份相同。

forloop 很容易做到这一点的另一种情况,但我想对其进行矢量化以提高速度/清洁度。但我不知道怎么做。

我尝试了更简单的方法,甚至只是制作了一个 df['newcol'] 并尝试从日期中删除左边的四个字符。像 df['newcol'] = df['sqldate'][0:4] 但失败了。它只生成 newcol = sqldate 的前四行,其余行 Nan,因为它将 [0:4] 解释为索引选择器。

对于在数据帧上使用操纵字符串值的更优雅、矢量化的方式有什么建议吗?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    您可以使用Series.str 在列上使用字符串函数。因此df['sqldate'].str[0:4] 将提取前 4 个字符(如果它们存在),然后检查两列(pdf 和 sqldate)的前四个字符是否相同,并将结果放入 'newcol':

    df['newcol'] = df['sqldate'].str[0:4]==df['pdf'].str[0:4]
    

    查看更多关于字符串函数的信息:

    http://pandas.pydata.org/pandas-docs/stable/text.html

    【讨论】:

      猜你喜欢
      • 2015-05-18
      • 2014-08-18
      • 2018-02-05
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 2021-12-14
      • 2015-05-07
      • 2021-12-30
      相关资源
      最近更新 更多