Pandas小白入门散记(3)---Series.str--源代码定位问题

文章目录

碰到了,一个错误,debug才定位到问题,记录一下。

本次最大收获是,pandas果然代码逻辑复杂,一个小小的异常捕捉,处处是门道。。。。。。

希望本次浅显的代码阅读过程,给你有小小的启发,愿您多读复杂代码,提升自我。

问题点

Series.str用到list对象上,不会产生报错,而是返回一个NaN
如下代码:

import pandas as pd
df = pd.DataFrame([1,2,3,4], columns=['test'])
df.loc[:, 'mylist'] =  [[1,], [32,3], [923], [324,4444]]

df # output 1

df.mylist.str.lower() # output2
output1: 
	test	mylist
0	1	[1]
1	2	[32, 3]
2	3	[923]
3	4	[324, 4444]

output2:
0   NaN
1   NaN
2   NaN
3   NaN
Name: mylist, dtype: float64

原因解释

  1. 查官网

https://pandas.pydata.org/docs/reference/api/pandas.Series.str.html#
没有查询到有用信息

  1. 查代码

查看源代码,发现是pandas异常捕捉并给了默认值。其具体过程如下:
在这里插入图片描述
如上图所示得到对象类型,使用pandas.core.strings.accessor.StringMethods搜索到github上源代码:https://github.com/pandas-dev/pandas/blob/main/pandas/core/strings/accessor.py

    @Appender(_shared_docs["casemethods"] % _doc_args["lower"])
    @forbid_nonstring_types(["bytes"])
    def lower(self):
        result = self._data.array._str_lower()
        return self._wrap_result(result)

模拟运行如下,发现有报错,猜测,正常情况

df.mylist.str._data.array._str_lower()
output:
	array([nan, nan, nan, nan])

查看df.mylist.str._data.array类型为:
在这里插入图片描述
搜索类型pandas.core.arrays.numpy_.PandasArray找到其源代码:在github中找不到’PandasArray’。
在这里插入图片描述
找到ObjectStringArrayMixin发现_str_lower函数,如下:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值