8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

pandas 将 csv 列读取为浮点数并将空单元格设置为 0

Kjartan 2月前

45 0

是否可以将 CSV 读入为 pandas DataFrame 并在一行中将空格(或空单元格)设置为 0?下面是该问题的说明。输入:$ csvlook data.csv |------+---+------|...

是否可以将 CSV 读入为 pandas DataFrame 并在一行中将空格(或空单元格)设置为 0?下面是该问题的说明。

输入:

$ csvlook data.csv    
|------+---+------|
|  a   | b | c    |
|------+---+------|
|      | a | 0.0  |
|  0   | b | 1.0  |
|  1.5 | c | 2.5  |
|  2.1 | d | 3.0  |
|------+---+------|

我想要的是:

python% print(df)
    a   b   c
0   0   a   0.0
1   0   b   1.0
2   1.5 c   2.5
3   2.1 d   3.0

我尝试过的:

df = pd.read_csv('data.csv', dtype={'a': float, 'b': str, 'c': float})

由于第 0 行 a 列的空格,因此会引发 ValueError:

ValueError: could not convert string to float: 

使用 pandas 读取 CSV 时,有没有办法用 0 替换字符串?

生成测试数据的代码:

如果您想尝试一下,下面是我在上面的示例中用来生成测试数据的代码行:

import pandas as pd
df = pd.DataFrame({'a':[' ', 0, 1.5, 2.1], 'b':['a', 'b', 'c', 'd'], 'c': [0, 1, 2.5, 3]})
df.to_csv('data.csv', index=False)
帖子版权声明 1、本帖标题:pandas 将 csv 列读取为浮点数并将空单元格设置为 0
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Kjartan在本站《csv》版块原创发布, 转载请注明出处!
最新回复 (0)
  • Pandas 会自动用 NaN 读取空值,因此只需用 fillna 方法填充它们,设置所需的新值(在本例中为 0)。

    import pandas as pd
    
    df = pd.read_csv('data.csv').fillna(value = 0)
    

    得出的结果是:

         a  b    c
    0  0.0  a  0.0
    1  0.0  b  1.0
    2  1.5  c  2.5
    3  2.1  d  3.0
    

    您还可以通过传递字典为每一列设置不同的值。假设我们有以下 csv 文件:

         a    b    c
    0  NaN    a  0.0
    1  0.0    b  1.0
    2  1.5  NaN  2.5
    3  2.1    d  NaN
    

    如果我们希望它与以前相同,我们应该这样做:

    pd.read_csv('data.csv').fillna(value = {'a':0,'b':'c','c':3})
    

    再次屈服:

         a  b    c
    0  0.0  a  0.0
    1  0.0  b  1.0
    2  1.5  c  2.5
    3  2.1  d  3.0
    
  • 几乎只有一行,但在实际情况下可能不起作用。

    中映射到 NaN read_csv

    import pandas as pd
    df = pd.read_csv('data.csv', na_values=" ")
    

    屈服

         a  b    c
    0  NaN  a  0.0
    1  0.0  b  1.0
    2  1.5  c  2.5
    3  2.1  d  3.0
    

    然后,您可以运行 fillna 将 NaN 更改为 .0 .

    因此,下面这行代码可以完成所有的事情:

    df = pd.read_csv('data.csv', na_values=" ").fillna(0)
    

    给出

         a  b    c
    0  0.0  a  0.0
    1  0.0  b  1.0
    2  1.5  c  2.5
    3  2.1  d  3.0
    
  • df.replace(r'\s+', 0, regex=True)
    
         a  b    c
    0  0.0  a  0.0
    1  0.0  b  1.0
    2  1.5  c  2.5
    3  2.1  d  3.0
    
返回
作者最近主题: