如果我使用Pandas read_csv()函数,则默认情况下短行元素将映射到NaN。我想在将NA
解释为NaN
时取消该映射。由于传输问题,我对文件截断最感兴趣,但是文件中间的短行应具有相同的missing"
值。我尝试弄乱na_filter=False
和keep_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_filter
和keep_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
。
答案 0 :(得分:1)
默认情况下,Pandas会将以下值解释为NaN
(来自docs):
NaN
可以识别的默认值为['-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
。
要解决第二个问题,为了避免Pandas在读取具有可变列数的文件时抛出错误,您需要指定列名。全部放在一起:
# 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
参数。