征求反馈,在使用 Pandas 时,为什么使用 pandas.Series 比使用列表数据类型更好?

问题描述

我发现了一个艰难的方法,当使用 Pandas 时,使用 pandas.Series 比使用 lists 数据类型来操作数据更好。 即使我了解 Pandas 如何存储不同的数据类型,我也没有意识到使用 stringslists 而不是 pandas.Series 的后果强>对象。

Pandas dtype

如上图所示,pandas 将字符串存储为对象,它不区分字符串、列表、字典等,python iterable
我制作了自己的函数,它返回一个 pandas.DataFrame 列名、列的 Pandas 数据类型和列的 Python 数据类型,见下图。如果你有兴趣看函数代码行,请留下评论,我会分享

enter image description here

我遇到的大多数 pandas.DataFrames 都有一个 NaN 值,表示任何未定义的值。
pandas.DataFrame 列的字符串对象,例如 first_names,可以包含 NaN 值,NaN 是浮点数据类型.
NaN 值被普遍使用的主要原因,是因为它的实用性,当与 DataFrame.dropna()函数结合使用时,它成为一种公认且强大的数据操作工具。

大多数pandas教材使用listspandas.DataFrames来操作数据,所以我也是这样做的,见下面的代码

        # Removes Html code and \n
        for name in essay_names:
            # Initializes essay text list 
            essay_txts = []
            for essay in profiles[name]:
                # Checks if the essay is empty,NaN
                if type(essay) == type(.0):
                    # Adds NaN text to the essay texts Series,empty text
                    essay_txts.append(np.NaN)
                else:
                    essay_clean = re.sub('','',essay).replace('\n',' ').replace('  ',' ')    
                    essay_txts.append(essay_clean)
            # Stores cleaned essay text 
            profiles[f'{name}_text'] = essay_txts

代码essay_txts = []essay_txts.append(np.NaN) 在尝试使用 DataFrame.dropna() 操作 DataFrames 数据时会产生问题,essay_txts列表 字符串np.nan 值没有作为浮点数保存在列表 但作为 string'nan',因此它也作为 string 保存在 DataFrame 中。
DataFrame.dropna() 函数不会将该值识别为 NaN 浮点,并且不会删除输入值的 DataFrame 行。

替换代码
essay_txts = []
essay_txts.append(np.NaN)

essay_txts = pd.Series(dtype='object')
essay_txts = essay_txts.append(pd.Series(np.NaN),ignore_index=True)
是我对使用 lists 并尝试利用 NaN 值来操作熊猫数据所产生的问题的解决方案。

查看下面的完整代码

    # Removes Html code and \n
    for name in essay_names:
        # I use pandas Series,a Series will accept NaN float and object (string) values
        essay_txts = pd.Series(dtype='object')
        for essay in profiles[name]:
            # Checks if the essay is empty,NaN
            if type(essay) == type(.0):
                # Adds NaN text to the essay texts Series,empty text
                essay_txts = essay_txts.append(pd.Series(np.NaN),ignore_index=True)
            else:
                essay_clean = re.sub('',' ')
                essay_txts = essay_txts.append(pd.Series(essay_clean),ignore_index=True)
        # Stores cleaned essay text 
        profiles[f'{name}_text'] = essay_txts

感谢您提供反馈,或分享更好的方法解决使用列表产生的问题,并尝试利用 NaN 值来操作熊猫数据。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)