问题描述
我发现了一个艰难的方法,当使用 Pandas 时,使用 pandas.Series 比使用 lists 数据类型来操作数据更好。 即使我了解 Pandas 如何存储不同的数据类型,我也没有意识到使用 strings 的 lists 而不是 pandas.Series 的后果强>对象。
如上图所示,pandas 将字符串存储为对象,它不区分字符串、列表、字典等,python iterable。
我制作了自己的函数,它返回一个 pandas.DataFrame 列名、列的 Pandas 数据类型和列的 Python 数据类型,见下图。如果你有兴趣看函数代码行,请留下评论,我会分享。
我遇到的大多数 pandas.DataFrames 都有一个 NaN 值,表示任何未定义的值。
pandas.DataFrame 列的字符串对象,例如 first_names,可以包含 NaN 值,NaN 是浮点数据类型.
NaN 值被普遍使用的主要原因,是因为它的实用性,当与 DataFrame.dropna() 等函数结合使用时,它成为一种公认且强大的数据操作工具。
大多数pandas教材使用lists和pandas.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 (将#修改为@)