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

时间:2017-08-23 22:27:02

标签: python pandas csv numpy

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

pandas.read_csv有一个参数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。在na_values=NaN中设置pandas.read_csv(),以便将.csv文件中的所有元素转换为np.float,然后将其读入数据框。

(2)来自@AndréChristofferAndersen。读取.csv文件作为数据帧后。使用pandas.to_numeric将数据框的列转换为np.float。使用for循环将所有列转换为数字。

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

希望它会对读者有所帮助!

2 个答案:

答案 0 :(得分:2)

如果您有足够新的pandas版本,您也可以使用pd.to_numeric(...)

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

而且,这是一个转换整个数据帧的技巧:

{{1}}

答案 1 :(得分:1)

为什么不使用numpy.loadtxt?如果你想使用pandas,因为你有混合数据而你想要一个数字列作为numpy数组,你总是可以使用df['column'].as_matrix(),或者你可以根据需要转换整个数据框。