如何在使用 pandas.read_csv 读取 csv 文件时将 pandas.dataframe 中的元素转换为 np.float?
Posted
技术标签:
【中文标题】如何在使用 pandas.read_csv 读取 csv 文件时将 pandas.dataframe 中的元素转换为 np.float?【英文标题】:How to convert the element in a pandas.dataframe to np.float while use pandas.read_csv to read csv file? 【发布时间】:2018-02-01 15:53:58 【问题描述】:我有一个 .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。在pandas.read_csv()
中设置na_values=NaN
,这样.csv 文件中的所有元素都可以转换为np.float
,以便读入数据帧。
(2) 来自@André Christoffer Andersen。将 .csv 文件作为数据框读取后。使用pandas.to_numeric
将数据框的一列转换为np.float
。使用 for 循环将所有列转换为数字。
(3) 来自@ThisGuyCantEven。使用numpy.loadtxt
将.csv 文件读入numpy.ndarray
。使用skiprows
参数跳过具有不相等元素的行。然后使用numpy.nan_to_num()
将nan
转换为零。
希望对关注读者有所帮助!
【问题讨论】:
您可以通过na_values
参数告诉 read_csv NaN 值是什么。这应该将这些值转换为 np.nan,然后您可以像往常一样替换它。
非常感谢@Jakub!它就像一个魅力!
【参考方案1】:
为什么不直接使用numpy.loadtxt
?如果你想使用 pandas,比如说你有混合数据,并且你想要一个数字列作为一个 numpy 数组,你总是可以使用df['column'].as_matrix()
,或者你可以根据需要转换整个数据框。
【讨论】:
非常感谢!我忘了numpy.loadtxt
。我刚试了一下,发现numpy.loadtxt
要求每行必须有相同数量的元素。对于我的 .csv 文件,需要跳过前几行,这也可以通过参数 skiprows
来完成。对于nan
,可以通过numpy.nan_to_num
将其转换为0。这可能是另一种方法。
您也可以使用 usecols
参数跳过列,但是,如果您想跳过数组指定的某些列,您可能必须使用该数组来屏蔽另一个数组中的值,该数组包含所有列索引。【参考方案2】:
如果您有足够新的 pandas 版本,您也可以使用 pd.to_numeric(...):
df['mycol'] = pd.to_numeric(df['mycol'], errors='coerce')
而且,这里有一个转换整个数据框的技巧:
for col in df.columns:
df[col] = pd.to_numeric(df[col], errors='coerce')
【讨论】:
非常感谢!它适用于系列对象或单个数据框列。有什么函数可以转换整个数据框? @Jundong 当然。请参阅我的编辑。只需遍历列即可。以上是关于如何在使用 pandas.read_csv 读取 csv 文件时将 pandas.dataframe 中的元素转换为 np.float?的主要内容,如果未能解决你的问题,请参考以下文章
如何在使用 pandas.read_csv 读取 csv 文件时将 pandas.dataframe 中的元素转换为 np.float?
如何使用带有 gzip 压缩选项的 pandas read_csv 读取 tar.gz 文件?
如何使用 pandas.read_csv 在双引号之间读取带有千位分隔符的数字 [重复]
pandas read_csv读取大文件的Memory error问题