有点哭笑不得,折腾了快 10 个小时了,还是没搞明白 excel 的行和列 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
zhlenmao
V2EX    程序员

有点哭笑不得,折腾了快 10 个小时了,还是没搞明白 excel 的行和列

  •  1
     
  •   zhlenmao 2024-03-25 23:58:27 +08:00 3307 次点击
    这是一个创建于 567 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我把 chatgpt4 和 claud 都搞晕、蒙了,当然更可能是我的问题,一直没想过这个问题,毕竟能用就行了。

    一个空白的 excel 文件,上面用行 A 、B 、C..............MA.........MR....这样标注,行用 1 、2 、3 、4.......这样标注着。点中最左上的单元格是 A1,第二列是 B1 。

    如果用 pandas 。我想计算 B 列-A 列并输出,到底该怎么代码呢?

    我看他的意思,又 gg 了下,第一行好像才是他们认为的列

    18 条回复    2024-03-27 23:02:45 +08:00
    Tumblr
        1
    Tumblr  
       2024-03-26 00:09:37 +08:00
    > 如果用 pandas 。我想计算 B 列-A 列并输出,到底该怎么代码呢?

    这个是不是可以理解为两个问题?
    1. 如何把 Excel 中的数据导入到 pandas
    2. 如何对两列进行相减

    如果是在 Excel 中,很简单, = B1 - A1
    zhlenmao
        2
    zhlenmao  
    OP
       2024-03-26 00:17:22 +08:00
    @Tumblr 我真是受不了我自己了。如果第一行我定义下,就是 A1=A ,B1=B ,以此类推,那么类似这样
    A B C
    1 A B C
    2 1 666 33
    3 2 33 55
    4 3 55 99
    .

    import pandas as pd

    # Excel 文件路径
    file_path = 'abc.xlsx'

    # 读取 Excel 文件
    df = pd.read_excel(file_path)
    df['Difference'] = df['C'] - df['A']

    # 输出新计算的差值列
    print(df['Difference'])

    这是可以的。第 1 行成了列标题。

    A B C
    1 2 2 2
    2 1 666 33
    3 2 33 55
    4 3 55 99

    这样再执行上面的代码就是 error 报错了。因为列标题成了 2 2 2 。问题是我想指定 A B C 这个东东来定义”列“,好做运算

    搞不明白了,头晕了脑涨了 :)
    c6h6benzene
        3
    c6h6benzene  
       2024-03-26 00:25:32 +08:00 via iPhone
    ABC 是列,123 是行。虽然 df 没怎么写过,但好像有.row .col 指定行列(坐标)取数的写法。
    Maxhimax
        4
    Maxhimax  
       2024-03-26 00:36:47 +08:00 via iPhone   8
    你的表述能力堪忧。
    zhlenmao
        5
    zhlenmao  
    OP
       2024-03-26 01:36:29 +08:00
    def excel_column_number(column_label):
    """将 Excel 列的字母标识符转换为从 0 开始的索引"""
    column_number = 0
    for c in column_label:
    column_number = column_number * 26 + (ord(c.upper()) - ord('A')) + 1
    # 返回从 0 开始的索引
    return column_number - 1

    # 举例使用
    import pandas as pd

    # 读取 Excel 文件
    df = pd.read_excel('反查数据 (240108)_test.xlsx')

    # 假设你想获取列标识符为"C"的数据
    column_index = excel_column_number("MR")
    column_data = df.iloc[:, column_index]

    # 显示结果
    print(column_data)

    。结。
    anson264556364
        6
    anson264556364  
       2024-03-26 07:18:01 +08:00
    不知有没有 excel 好用的辅助工具
    Tumblr
        7
    Tumblr  
       2024-03-26 08:36:55 +08:00
    @anson264556364 #6 Power BI
    sakilascott
        8
    sakilascott  
       2024-03-26 08:50:57 +08:00
    多年 excel 工作者,没看懂
    tikazyq
        9
    tikazyq  
       2024-03-26 08:51:12 +08:00
    问题描述不清楚,上帝来了都没辙。你的问题看上去是 read_excel 中自动将第二行识别为了表头,但你像要第一行识别为表头,可以查一下文档,有个参数应该叫 skip_rows
    anson264556364
        10
    anson264556364  
       2024-03-26 08:52:58 +08:00
    @Tumblr 好像挺好,好像挺复杂
    visper
        11
    visper  
       2024-03-26 09:03:40 +08:00
    你这跟 excel 没关系,是跟 pandas 加载数据的时候怎么指定列名有关系吧。
    Muniesa
        12
    Muniesa  
       2024-03-26 10:27:44 +08:00 via Android
    我是 ai 我也懵,我猜你的目的大概可以通过在 read_excel 的参数里加上 header=None, names=['A', 'B','C']实现
    xyfan
        13
    xyfan  
       2024-03-26 10:53:38 +08:00
    pandas 从 Excel 导入数据时默认将第一行当作列名(保存为 Excel 时也是如此),如果你不想让 pandas 将第一行识别为列名,而是将其识别为第一行数据,只需要在导入数据时指定 read_excel 的参数 header=None ,如楼上所示。令:表达能力堪忧,搜索能力也堪忧,我使用关键词“pandas excel 第一行识别为数据”进行搜索,结果中既有将第一行作为列名的教程,也有不将第一行作为列名的教程,完全能够解决你的问题。
    ZnductR0MjHvjRQ3
        14
    ZnductR0MjHvjRQ3  
       2024-03-26 14:10:45 +08:00
    哥们 你为什么一定要让他明白?你绕圈问他 然后让他给一些差不多的 你去理解代码 然后改不比让他搞明白强吗
    cyspy
        15
    cyspy  
       2024-03-26 14:49:55 +08:00
    直接用 row 和 column ,陆台对行列的翻译是反的
    zhlenmao
        16
    zhlenmao  
    OP
       2024-03-27 22:50:42 +08:00
    哈哈哈。我来总结下:pandas 读取时,是不理会列标签 A 、B 、C ,行标签 1 、2 、3.....这些的,他只是读入了整个表。而我是天真的想着他会读进这些东西 :)
    zhlenmao
        17
    zhlenmao  
    OP
       2024-03-27 23:01:52 +08:00
    @Tumblr 表格的第一行要定义 A 、B ,也就是单元格 A1=A ,单元格 A2=B ,这样相当于给 pandas 定义了标题了。原有的 excel 的标签名它是不认识的,那些我们人类看到的列标签名 A\B\C ,行的 1\2\3
    zhlenmao
        18
    zhlenmao  
    OP
       2024-03-27 23:02:45 +08:00
    @Tumblr 我去,一敲击回车自动回复了。import pandas as pd

    # 假设 df 是你的 DataFrame
    # 创建一个新列 'C' 来存储 A 列和 B 列之间的差
    df = pd.read_excel('abc.xlsx', engine='openpyxl')

    df['C'] = df['B'] - df['A']
    df.to_excel('c.xlsx', index=False, engine='openpyxl')
    # 输出结果
    print(df)
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3536 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 05:03 PVG 13:03 LAX 22:03 JFK 01:03
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86