让 pandas.read_csv 将空值读取为空字符串而不是 nan

2025-03-04 08:27:00
admin
原创
84
摘要:问题描述:我正在使用 pandas 库读取一些 CSV 数据。在我的数据中,某些列包含字符串。字符串"nan"是一个可能的值,空字符串也是如此。我设法让 pandas 将“nan”读取为字符串,但我不知道如何让它不将空值读取为 NaN。以下是示例数据和输出One,Two,Three a,1...

问题描述:

我正在使用 pandas 库读取一些 CSV 数据。在我的数据中,某些列包含字符串。字符串"nan"是一个可能的值,空字符串也是如此。我设法让 pandas 将“nan”读取为字符串,但我不知道如何让它不将空值读取为 NaN。以下是示例数据和输出

One,Two,Three
a,1,one
b,2,two
,3,three
d,4,nan
e,5,five
nan,6,
g,7,seven

>>> pandas.read_csv('test.csv', na_values={'One': [], "Three": []})
    One  Two  Three
0    a    1    one
1    b    2    two
2  NaN    3  three
3    d    4    nan
4    e    5   five
5  nan    6    NaN
6    g    7  seven

它正确地将“nan”读作字符串“nan”,但仍然将空单元格读作 NaN。我尝试将参数传递strconvertersread_csv(使用converters={'One': str})),但它仍然将空单元格读作 NaN。

我意识到我可以在读取后使用 fillna 填充值,但真的没有办法告诉 pandas 特定 CSV 列中的空单元格应该读取为空字符串而不是 NaN 吗?


解决方案 1:

在阅读其他答案和评论后,我仍然感到困惑。但现在答案似乎更简单了,所以请看这里。

自 Pandas 版本 0.9(从 2012 年起)以来,您可以通过简单设置来读取将空单元格解释为空字符串的 csv keep_default_na=False

pd.read_csv('test.csv', keep_default_na=False)

这个问题在

  • read_csv 中更一致的 na_values 处理 · 问题 #1657 · pandas-dev/pandas

该问题已于 2012 年 8 月 19 日在 Pandas 0.9 版中修复

  • BUG:更一致的 na_values #1657 · pandas-dev/pandas@d9abf68

解决方案 2:

我添加了一张票,以便在此处添加某种选项:

https://github.com/pydata/pandas/issues/1450

与此同时,result.fillna('')你应该做你想做的事

编辑:在开发版本(最终版本为 0.8.0)中,如果指定一个空列表na_values,则空字符串将在结果中保留为空字符串

解决方案 3:

read_csv()对此,我们在 Pandas 中有一个简单的论据:

使用:

df = pd.read_csv('test.csv', na_filter= False)

解决方案 4:

pandas默认定义为缺失值的内容read_csv()可以在这里找到。

import pandas
default_missing = pandas._libs.parsers.STR_NA_VALUES
print(default_missing)

输出

{'', '<NA>', 'nan', '1.#QNAN', 'NA', 'null', 'n/a', '-nan', '1.#IND', '#N/A N/A', 'N/A', 'NULL', 'NaN', '-1.#IND', '-1.#QNAN', '#NA', '#N/A', '-NaN'}

这样您就可以选择退出。

import pandas
default_missing = pandas._libs.parsers.STR_NA_VALUES
default_missing = default_missing.remove('')
default_missing = default_missing.remove('na')

with open('test.csv', 'r') as csv_file:
    pandas.read_csv(csv_file, na_values=default_missing)

解决方案 5:

如果您只想保留一列的空字符串,请定义str为列转换器(dtypes不起作用)。使用 pandas 1.1.5 检查:

pd.read_csv('test.csv', converters={'One': str, 'Three': str})

解决方案 6:

pd.read_csv( sourceObj, dtype='string')

不需要额外的参数。

每列类型都是python原始字符串,空值变为空字符串''。

版本:Pandas v1.5

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   4008  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   2751  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Freshdesk、ClickUp、nTask、Hubstaff、Plutio、Productive、Targa、Bonsai、Wrike。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在项目管理过程中面临着诸多痛点,如任务分配不...
项目管理系统   86  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Monday、TeamGantt、Filestage、Chanty、Visor、Smartsheet、Productive、Quire、Planview。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多项目经理和团队在管理复杂项目时,常...
开源项目管理工具   97  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Smartsheet、GanttPRO、Backlog、Visor、ResourceGuru、Productive、Xebrio、Hive、Quire。在当今快节奏的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在选择项目管理工具时常常面临困惑:...
项目管理系统   85  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用