我有一个很大的 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})
我想创建一个 bool 值列,指示 sqldate 的年份是否与 pdf 名称的年份相同。
forloop 很容易做到这一点的另一种情况,但我想对其进行矢量化以提高速度/清洁度。但我想不通。
我尝试过更简单的方法,甚至只是制作一个 df['newcol'] 并尝试从日期中删除左边的四个字符。像 df['newcol'] = df['sqldate'][0:4] 但失败了。它只使 newcol = sqldate 的前四行和其余行成为 Nan,因为它将 [0:4] 解释为索引选择器。
对于在数据帧上使用操纵字符串值的更优雅、矢量化的方式有什么建议吗?
最佳答案
您可以使用 Series.str
在列上使用字符串函数。因此 df['sqldate'].str[0:4]
将提取前 4 个字符(如果它们存在),然后检查两列(pdf 和 sqldate)的前四个字符是否是一样的,它把结果放在 'newcol' 中:
df['newcol'] = df['sqldate'].str[0:4]==df['pdf'].str[0:4]
查看更多关于字符串函数的信息:
关于python - Pandas 数据框中的矢量化字符串操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33624966/