当NA是有效值时检测CSV文件截断

2024-04-19 23:53:17 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我使用Pandas read \u csv()函数,那么默认情况下,短行的元素映射到NaN。我想在将NA解释为NaN时抑制该映射。我最感兴趣的是由于传输问题而导致的文件截断,但是文件中间的短行应该具有相同的missing"值。我试着在na_filter=Falsekeep_default_na=False之间捣乱,虽然它们似乎都将空单元格映射到空字符串,但都没有将字符串NA映射到NaN

有没有办法吃我的蛋糕(NA=>NaN)并且也吃它(缺少未映射到NaN的值)(我正在使用Pandas 0.22.0 w/ Python 3.6.

示例:

col1,col2,col3,col4
1,2,NA,4
4,5
12

假设文件已被截断,因此字符"12"是文件中的最后一个字符(无EOF)。当na_filterkeep_default_na的默认值为True时,结果值为

1,2,NaN,4
4,5,NaN,NaN
12,NaN,NaN,NaN

如果我设置为False,我得到

1,2,NA,4
4,5,,
12,,,

我想找到一些方法从第一行的第三列中获取NaN,而不必将缺少的值映射到NaN


Tags: 文件csv函数字符串falsedefaultpandasread
1条回答
网友
1楼 · 发布于 2024-04-19 23:53:17

默认情况下,Pandas将以下值解释为NaN(来自docs):

The default NaN recognized values are ['-1.#IND', '1.#QNAN', '1.#IND', '-1.#QNAN', '#N/A N/A', '#N/A', 'N/A', 'n/a', 'NA', '#NA', 'NULL', 'null', 'NaN', '-NaN', 'nan', '-nan', ''].

为了避免NA被解析为空值,您需要设置keep_default_na=False并直接指定na_values

为了解决第二个问题,为了避免在读取列数可变的文件时出错,需要指定列名称。综合起来:

# new null values, removing NA from the list
new_na_values = ['-1.#IND', '1.#QNAN', '1.#IND', '-1.#QNAN', '#N/A N/A', '#N/A', 'N/A', 'n/a', '#NA', 'NULL', 'null', 'NaN', '-NaN', 'nan', '-nan', '']

# read in the file
df = pd.read_csv("<path to file>.csv", keep_default_na=False, na_values=new_na_values, names=["col1", "col2", "col3", "col4"])

编辑:看起来Pandas的最新版本现在可以读入列数可变的文件,而无需显式设置列名(例如,建议使用here)。因此,根据您的Pandas版本,您可能不需要names参数

相关问题 更多 >