Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在使用Pandas从CSV读取整数时优雅地回退到'NaN'值?_Python_Csv_Pandas_Data Processing - Fatal编程技术网

Python 如何在使用Pandas从CSV读取整数时优雅地回退到'NaN'值?

Python 如何在使用Pandas从CSV读取整数时优雅地回退到'NaN'值?,python,csv,pandas,data-processing,Python,Csv,Pandas,Data Processing,在对Pandas使用read\u csv时,如果我希望将给定列转换为类型,则格式错误的值将中断整个操作,而不会显示有问题的值 例如,运行以下操作: import pandas as pd import numpy as np df = pd.read_csv('my.csv', dtype={ 'my_column': np.int64 }) 将导致堆栈跟踪以错误结尾: ValueError: cannot safely convert passed user dtype of <i

在对Pandas使用
read\u csv
时,如果我希望将给定列转换为类型,则格式错误的值将中断整个操作,而不会显示有问题的值

例如,运行以下操作:

import pandas as pd
import numpy as np


df = pd.read_csv('my.csv', dtype={ 'my_column': np.int64 })
将导致堆栈跟踪以错误结尾:

ValueError: cannot safely convert passed user dtype of <i8 for object dtyped data in column ...

ValueError:由于我意识到的注释,无法安全地转换传递给的用户数据类型,这让我非常惊讶。因此,我切换到转换为浮动:

import pandas as pd
import numpy as np


df = pd.read_csv('my.csv', dtype={ 'my_column': np.float64 })
这给了我一个可以理解的错误消息,其中包含转换失败的值,因此我可以将失败的值添加到
na_值中

df = pd.read_csv('my.csv', dtype={ 'my_column': np.float64 }, na_values=['n/a'])
通过这种方式,我最终可以通过可视化和统计功能导入CSV:

>>>> df['session_planned_os'].dtype
dtype('float64')
一旦能够识别正确的
na_值
,就可以从
read_csv
中删除
dtype
参数。类型推断现在将正确进行:

df = pd.read_csv('my.csv', na_values=['n/a'])

您显式指定了数据类型,因此它希望该列的所有值都符合该类型,如果您知道要作为
NaN
处理的值,您可以将这些值传递给
na_值
,但是看起来最好让
read_csv
猜测,但这意味着数据类型将是
float64
因为
NaN
不能在
int64
中表示
计数是否指示了一些无法转换为数字的值?(这将导致
对象
dtype)谢谢,您的评论引导我找到了解决方案,我将其作为答案发布。如果你想添加一些内容,你可以自由地发布你的备选答案。Integer值通常以格式存储,这会耗尽实际数字上所有可用的位模式。没有留下任何东西来表示NaN。相比之下,大多数浮点是在中完成的,这为无穷大和NaN留出了位模式。请注意。请注意,
dtype={'my_column':np.float64}
不是必需的,这应该是自动生成的结果(在您设置正确的na_值之后)@joris您是对的,谢谢。但是,为了获得
na_值的值,这是必要的。我将编辑我的答案