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

43 天前
 zhlenmao

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

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

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

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

2637 次点击
所在节点    程序员
18 条回复
Tumblr
43 天前
> 如果用 pandas 。我想计算 B 列-A 列并输出,到底该怎么代码呢?

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

如果是在 Excel 中,很简单, = B1 - A1
zhlenmao
43 天前
@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
43 天前
ABC 是列,123 是行。虽然 df 没怎么写过,但好像有.row .col 指定行列(坐标)取数的写法。
Maxhimax
43 天前
你的表述能力堪忧。
zhlenmao
43 天前
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
43 天前
不知有没有 excel 好用的辅助工具
Tumblr
43 天前
@anson264556364 #6 Power BI 😁
sakilascott
43 天前
多年 excel 工作者,没看懂
tikazyq
43 天前
问题描述不清楚,上帝来了都没辙。你的问题看上去是 read_excel 中自动将第二行识别为了表头,但你像要第一行识别为表头,可以查一下文档,有个参数应该叫 skip_rows
anson264556364
43 天前
@Tumblr 好像挺好,好像挺复杂
visper
43 天前
你这跟 excel 没关系,是跟 pandas 加载数据的时候怎么指定列名有关系吧。
Muniesa
43 天前
我是 ai 我也懵,我猜你的目的大概可以通过在 read_excel 的参数里加上 header=None, names=['A', 'B','C']实现
xyfan
43 天前
pandas 从 Excel 导入数据时默认将第一行当作列名(保存为 Excel 时也是如此),如果你不想让 pandas 将第一行识别为列名,而是将其识别为第一行数据,只需要在导入数据时指定 read_excel 的参数 header=None ,如楼上所示。令:表达能力堪忧,搜索能力也堪忧,我使用关键词“pandas excel 第一行识别为数据”进行搜索,结果中既有将第一行作为列名的教程,也有不将第一行作为列名的教程,完全能够解决你的问题。
Motorola3
43 天前
哥们 你为什么一定要让他明白?你绕圈问他 然后让他给一些差不多的 你去理解代码 然后改不比让他搞明白强吗
cyspy
43 天前
直接用 row 和 column ,陆台对行列的翻译是反的
zhlenmao
41 天前
哈哈哈。我来总结下:pandas 读取时,是不理会列标签 A 、B 、C ,行标签 1 、2 、3.....这些的,他只是读入了整个表。而我是天真的想着他会读进这些东西 :)
zhlenmao
41 天前
@Tumblr 表格的第一行要定义 A 、B ,也就是单元格 A1=A ,单元格 A2=B ,这样相当于给 pandas 定义了标题了。原有的 excel 的标签名它是不认识的,那些我们人类看到的列标签名 A\B\C ,行的 1\2\3
zhlenmao
41 天前
@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)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1026968

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX