V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
kangjinwen
V2EX  ›  Python

读取了一个 csv 文件,是个矩阵,想求每行的和,第一行和第一列怎么排除呢。

  •  
  •   kangjinwen · 2020-11-30 19:28:37 +08:00 · 2169 次点击
    这是一个创建于 1460 天前的主题,其中的信息可能已经有所发展或是发生改变。

    demo 数据 one two three
    a 1 5 9
    b 2 6 10
    c 3 7 11
    d 4 8 12

    、、、代码如下

    df['row_sum']=df.apply(lambda x: x.sum(),axis=1)

    print(df)

    我的数据是这样的, 0.png 用上面的代码提示: return umr_sum(a, axis, dtype, out, keepdims, initial, where) TypeError: can only concatenate str (not "int") to str

    求教,我的这种数据怎么求和呢。

    13 条回复    2020-12-07 18:42:36 +08:00
    kangjinwen
        1
    kangjinwen  
    OP
       2020-11-30 19:33:46 +08:00
    jimmyismagic
        2
    jimmyismagic  
       2020-11-30 19:36:47 +08:00
    你的 df 是怎么生成的
    kangjinwen
        3
    kangjinwen  
    OP
       2020-11-30 19:38:47 +08:00
    @jimmyismagic
    df=pd.read_csv(r'D:\1.csv')
    df["总和"] =df.apply(lambda x: x.sum(),axis=1)
    df.to_csv(r'D:\2.csv',index=False)
    是这样读取的 csv
    kangjinwen
        4
    kangjinwen  
    OP
       2020-11-30 19:39:40 +08:00
    网上 demo 运行后是这样的
    df['row_sum']=df.apply(lambda x: x.sum(),axis=1)

    print(df)
    one two three row_sum
    a 1 5 9 15
    b 2 6 10 18
    c 3 7 11 21
    d 4 8 12 24
    jimmyismagic
        5
    jimmyismagic  
       2020-11-30 19:49:52 +08:00
    @kangjinwen
    pd.read_csv(path,index_col=0,header=0)
    这样做
    yucongo
        6
    yucongo  
       2020-11-30 19:57:13 +08:00
    pd.read_csv(r"file.csv").astype(float).sum(axis=1)
    kangjinwen
        7
    kangjinwen  
    OP
       2020-12-01 10:13:28 +08:00
    @jimmyismagic 谢谢大佬。就是这样的。。万分感谢!!!
    kangjinwen
        8
    kangjinwen  
    OP
       2020-12-01 12:10:07 +08:00
    @jimmyismagic 大佬。又要打扰一下,按您这样操作最后求和是正常的,但是新的 cvs 文件就没有第一列数据了。就 AUS.c01 ,AUS.c02 这些。。。
    怎么能保留这一列任然可以求和?
    df["总和"] =df.apply(lambda x: x.sum(),axis=1)里可以加什么参数从第二列开始计算吗?
    jimmyismagic
        9
    jimmyismagic  
       2020-12-01 13:47:45 +08:00
    @kangjinwen to_csv 的适合 index=True 就好了
    TimePPT
        10
    TimePPT  
       2020-12-01 14:28:38 +08:00
    @kangjinwen

    ```python
    import pandas as pd


    data = {"One": ["a", "b", "c", "d"], "Tow": [1, 2, 3, 4], "Three": [5, 6, 7, 8], "Four":[9, 10, 11, 12]}
    df = pd.DataFrame(data=data)
    df["sum"] = df.iloc[:, 1:].apply(np.sum, axis=1)
    df
    ```
    kangjinwen
        11
    kangjinwen  
    OP
       2020-12-01 15:24:01 +08:00
    @jimmyismagic 我用另外一种本办法解决的。没想到就是这么一个参数。谢谢大佬,祝生活舒心,工作顺心!
    jimmyismagic
        12
    jimmyismagic  
       2020-12-02 10:39:17 +08:00
    @kangjinwen 不客气,不用 pandas 好多年了,还记得一点东西
    shm7
        13
    shm7  
       2020-12-07 18:42:36 +08:00 via iPhone
    这种东西搜一下就有了 dataframe.sum(axis=1)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2844 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 12:32 · PVG 20:32 · LAX 04:32 · JFK 07:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.