我有一个.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
转换为零。
希望它会对读者有所帮助!
答案 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()
,或者你可以根据需要转换整个数据框。