Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.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.dataframe中的元素转换为np.float,同时使用pandas.read_csv读取csv文件?_Python_Pandas_Csv_Numpy - Fatal编程技术网

Python 如何将pandas.dataframe中的元素转换为np.float,同时使用pandas.read_csv读取csv文件?

Python 如何将pandas.dataframe中的元素转换为np.float,同时使用pandas.read_csv读取csv文件?,python,pandas,csv,numpy,Python,Pandas,Csv,Numpy,我有一个.csv文件,它是从软件导出的输出。这个.csv文件包含很多NAN。我需要通过将数据读入数据帧来分析数据,并使用dataframe.fillna(0)将所有的NAN替换为0。但是,当我使用pandas.read\u csv()导入此.csv文件时,数据帧中的元素类型为“str”,因此无法使用dataframe.fillna(0)。所以我的问题是:如何在读取.csv文件时将元素转换为np.float 对于,有一个参数dtype,解释如下: dtype : Type name or dict

我有一个.csv文件,它是从软件导出的输出。这个.csv文件包含很多NAN。我需要通过将数据读入数据帧来分析数据,并使用
dataframe.fillna(0)
将所有的NAN替换为0。但是,当我使用
pandas.read\u csv()
导入此.csv文件时,数据帧中的元素类型为“str”,因此无法使用
dataframe.fillna(0)
。所以我的问题是:如何在读取.csv文件时将元素转换为np.float

对于,有一个参数
dtype
,解释如下:

dtype : Type name or dict of column -> type, default None
Data type for data or columns. E.g. {‘a’: np.float64, ‘b’: np.int32} Use str 
or object to preserve and not interpret dtype. If converters are specified, 
they will be applied INSTEAD of dtype conversion.
有关于如何使用它的例子吗

多谢各位

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

更新:

以下是回答者提出的几种解决方案:

(1) 来自@Jakub。在
pandas.read\u csv()
中设置
na\u values=NaN
,以便.csv文件中的所有元素在读入数据帧时都可以转换为
np.float

(2) 来自安德烈·安徒生。将.csv文件读取为数据帧后。使用
pandas.to_numeric
将数据帧的一列转换为
np.float
。使用for循环将所有列转换为数字

(3) 来自@thisguenconteen。使用
numpy.loadtxt
将.csv文件读入
numpy.ndarray
。使用
skiprows
参数跳过元素不相等的行。然后使用
numpy.nan\u to_num()
nan
转换为零


希望,这将有助于以下读者

如果您有一个新版本,您也可以使用它:

df['mycol'] = pd.to_numeric(df['mycol'], errors='coerce')
下面是转换整个数据帧的技巧:

for col in df.columns:
    df[col] = pd.to_numeric(df[col], errors='coerce')

为什么不直接使用
numpy.loadtxt
?如果您想使用pandas,比如说,因为您有混合数据,并且您想要一个数字列作为numpy数组,那么您可以始终使用
df['column'].as_matrix()
,或者您可以根据需要转换整个数据帧。

您可以通过
na_value
参数告诉read_csv NaN值是什么。这会将这些值转换为np.nan,然后您可以像往常一样替换它。非常感谢,@Jakub!它就像一个符咒!非常感谢你!它适用于串行对象或单个数据帧列。有转换整个数据帧的功能吗?@Jundong当然有。请参阅我的编辑。绕着驴圈就行了。非常感谢!我忘了
numpy.loadtxt
。我刚刚试过,意识到
numpy.loadtxt
要求每行必须具有相同数量的元素。对于我的.csv文件,需要跳过前几行,这也可以通过参数
skiprows
完成。对于
nan
,它可以通过
numpy.nan\u to_num
转换为0。这可能是另一种方法。您也可以使用
usecols
参数跳过列,但是,如果要跳过数组指定的某些列,则可能必须使用该数组来屏蔽包含所有列索引的另一个数组中的值。