【问题标题】:pandas.Series.str.len not behaving as expectedpandas.Series.str.len 的行为不符合预期
【发布时间】:2022-01-06 16:02:42
【问题描述】:

我正在尝试使用 Pandas 单元格中的列表。也许不是最好的主意。我仍然发现 pandas.Series.str.len 方法无法正常工作,如documentation 所示。

这是我的代码:

    df3=pd.DataFrame({"comas":
                      [
        "1,2,3",
        "4,5,6,7,8,9",
        "7,8",
        "9,10,11,12"
                      ]
                     }                
                    ) 

    df3["split"]=df3["comas"].str.split()

正如预期的那样,我从那里获得以下数据框:

    comas   split
0   1,2,3   [1,2,3]
1   4,5,6,7,8,9 [4,5,6,7,8,9]
2   7,8 [7,8]
3   9,10,11,12  [9,10,11,12]

现在我想知道每个列表的长度。

df3["split"].str.len()

我明白了

0    1
1    1
2    1
3    1
Name: split, dtype: int64

我在文档中看到的是

s = pd.Series(['dog',
                '',
                5,
                {'foo' : 'bar'},
                [2, 3, 5, 7],
                ('one', 'two', 'three')])
s
0                  dog
1
2                    5
3       {'foo': 'bar'}
4         [2, 3, 5, 7]
5    (one, two, three)
dtype: object
s.str.len()
0    3.0
1    0.0
2    NaN
3    1.0
4    4.0
5    3.0
dtype: float64

有人可以向我解释一下示例系列的第四个元素中的列表项和我的系列有什么区别吗?我正在使用熊猫版本 1.3.3

提前谢谢你!


编辑:

RoseGod 是对的,我没有在拆分中包含分隔符。我很困惑,因为 Jupyter 以几乎相同的方式显示数据框中的元素,无论它是否实际分离

df3.loc[0]

comas                  1,2,3
split                [1,2,3]
split_separator    [1, 2, 3]
Name: 0, dtype: object

如果我得到一个单元格,它确实将元素显示为单个字符串:

df3.loc[0,"split"]
['1,2,3']

df3.loc[0,"split_separator"]
['1', '2', '3']

【问题讨论】:

    标签: python pandas list


    【解决方案1】:

    在拆分中,您应该指定要如何拆分:

    df3["split"]=df3["comas"].str.split(',')
    

    那么输出就是你想要的形状了:

    df3["split"].str.len()
    
    0    3
    1    6
    2    2
    3    4
    Name: split, dtype: int64
    

    如果在使用拆分后打印第一行中的值而不指定分隔符,则输出如下:

    ['1,2,3']
    

    您可以看到它并没有真正将其拆分为列表,而是创建了一个包含字符串值的列表。

    【讨论】:

    • 我明白了。我很困惑,因为当我在 jupyter 中打印数据帧时, split() 和 split(",") 的结果看起来几乎相同。
    • 我明白了,这就是为什么有时最好只看一个样本而不是整个数据帧。
    猜你喜欢
    • 1970-01-01
    • 2017-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    • 2021-04-09
    相关资源
    最近更新 更多