如何在使用 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问题

python拾遗系列:pandas read_csv方法如何读取字符串变量

使用 pandas.read_csv 从 URL 读取压缩的 CSV 文件时出错