使用pandas模块将excel单元格值分配给变量[Python 3.8,Linux]

使用pandas模块将excel单元格值分配给变量[Python 3.8,Linux],python,excel,pandas,Python,Excel,Pandas,前言: +----+----+----+ | A | B | C | +------------------+ | | | | | | 1 | hi | hi | hi | | | | | | +------------------+ | | | | | | 2 | hi | hi | hi | | | | | | +------------------+ | | | |

前言:

    +----+----+----+
    | A  | B  | C  |
+------------------+
|   |    |    |    |
| 1 | hi | hi | hi |
|   |    |    |    |
+------------------+
|   |    |    |    |
| 2 | hi | hi | hi |
|   |    |    |    |
+------------------+
|   |    |    |    |
| 3 | hi | hi | hi |
|   |    |    |    |
+---+----+----+----+
如果可能的话,我宁愿避免冗长的过程。作为一个初学者,一行有很多语法是有点压倒性的,如果我需要使用类似的东西,请给一个基本的注意他们做什么。我知道这一点并不重要,它只是让你的优势消失。请指出我在哪里使用了低效的代码,并建议更好的函数和/或模块,正如我所说的,我对python知之甚少

情况:

    +----+----+----+
    | A  | B  | C  |
+------------------+
|   |    |    |    |
| 1 | hi | hi | hi |
|   |    |    |    |
+------------------+
|   |    |    |    |
| 2 | hi | hi | hi |
|   |    |    |    |
+------------------+
|   |    |    |    |
| 3 | hi | hi | hi |
|   |    |    |    |
+---+----+----+----+
我是熊猫队的新手,但我花时间玩弄了
x.iloc[y,x]
x.loc[y,x]
(其中x是
pd.read\u excel('/my/file/name.xlsx',sheet\u name='sheet1')
),至少对于给定的格式,我理解是什么让他们这么做的。我知道这些将对我的宏有用。我在Linux上,所以VBA不是一个容易的选择,而PyUNO for LibreOffice是一个我推迟了一段时间的项目。我认为上述函数不是从python中选择excel单元格的最佳方法

我的发现:

    +----+----+----+
    | A  | B  | C  |
+------------------+
|   |    |    |    |
| 1 | hi | hi | hi |
|   |    |    |    |
+------------------+
|   |    |    |    |
| 2 | hi | hi | hi |
|   |    |    |    |
+------------------+
|   |    |    |    |
| 3 | hi | hi | hi |
|   |    |    |    |
+---+----+----+----+
太多了。对于像我这样的初学者来说,大多数教程都非常复杂,几乎没有解释;我可以让那里的代码工作,我只是不知道为什么它会这样工作。我发现的大部分信息都与标准的“内部”python数据库有关,与excel相关的文章似乎很少,不幸的是,我读到的那些与更高级的函数有关。我可能会学,但我现在不感兴趣

问题:

    +----+----+----+
    | A  | B  | C  |
+------------------+
|   |    |    |    |
| 1 | hi | hi | hi |
|   |    |    |    |
+------------------+
|   |    |    |    |
| 2 | hi | hi | hi |
|   |    |    |    |
+------------------+
|   |    |    |    |
| 3 | hi | hi | hi |
|   |    |    |    |
+---+----+----+----+
让我们看一看我之前写的这段代码,并从pythonbasics.org获得一些帮助

import pandas as pd
import xlrd #not sure if this is needed, thonny assistant says its not, website says it is
df = pd.read_excel('/home/myname/Desktop/sheetname.xlsx', sheet_name='sheet1')
p = df.loc[5, 5]
p = str(p) #unsure if this does anything, I haven't got a write to A.txt either way
path = "/home/mynmae/Desktop/A.txt"
text_file = open(path, "w")
text_file.write('%s' % p)
text_file.close
让我们把这些乱七八糟的东西处理掉。 首先,我读取sheetname.xlsx并将其分配给df

df = pd.read_excel('/home/myname/Desktop/sheetname.xlsx', sheet_name='sheet1')
现在我尝试读取单元格F6,让我们继续进行p的字符串转换

p = df.loc[5, 5]
p = str(p) 
现在我们有了p,让我们在我的桌面上打开一个文本文件

path = "/home/mynmae/Desktop/A.txt"
text_file = open(path, "w")
剩下的就是将p“粘贴”到文本文件中。我们用“w”打开了它,这样我们就可以在文件上写了。p是一个字符串,因此我们使用
('%s'%p)

现在我们应该在A.txt中有F6的值(让我们说它是“hello”)!让我们看看:

A.txt;
   
……噢

我所知道的:

    +----+----+----+
    | A  | B  | C  |
+------------------+
|   |    |    |    |
| 1 | hi | hi | hi |
|   |    |    |    |
+------------------+
|   |    |    |    |
| 2 | hi | hi | hi |
|   |    |    |    |
+------------------+
|   |    |    |    |
| 3 | hi | hi | hi |
|   |    |    |    |
+---+----+----+----+
所有写东西都在我的第二个程序中工作。唯一的区别是
p
被另一个字符串变量替换,我想这不是问题所在。但是,当我在转换
p=str(p)
后调用
print(p)
时,它会在标题就位的情况下提供我想要的内容。我想删除标题,但这是为了以后

我的问题:

    +----+----+----+
    | A  | B  | C  |
+------------------+
|   |    |    |    |
| 1 | hi | hi | hi |
|   |    |    |    |
+------------------+
|   |    |    |    |
| 2 | hi | hi | hi |
|   |    |    |    |
+------------------+
|   |    |    |    |
| 3 | hi | hi | hi |
|   |    |    |    |
+---+----+----+----+

给定电子表格“sheetname.xlsx”和工作表“sheet1”,使用pandas(或更好的电子表格工作模块,如果有)如何将单元格F6(或任何单元格,切换我的选择很容易)的值分配给变量
p

您可以不使用pandas,使用模块:


问题的解决方案:

    +----+----+----+
    | A  | B  | C  |
+------------------+
|   |    |    |    |
| 1 | hi | hi | hi |
|   |    |    |    |
+------------------+
|   |    |    |    |
| 2 | hi | hi | hi |
|   |    |    |    |
+------------------+
|   |    |    |    |
| 3 | hi | hi | hi |
|   |    |    |    |
+---+----+----+----+
你会对这项修正案有多愚蠢感到愤怒的。您忘记将
()
放在
文本文件之后。请关闭
。您没有执行
.close()
函数。它没有抛出运行时错误,因为它只是返回该行中
.close
函数的值。然后,它将转到以下代码行

请试试这个:

path = "/home/myname/Desktop/A.txt"
text_file = open(path, "w")
text_file.write('%s' % p)
text_file.close()

附加:

    +----+----+----+
    | A  | B  | C  |
+------------------+
|   |    |    |    |
| 1 | hi | hi | hi |
|   |    |    |    |
+------------------+
|   |    |    |    |
| 2 | hi | hi | hi |
|   |    |    |    |
+------------------+
|   |    |    |    |
| 3 | hi | hi | hi |
|   |    |    |    |
+---+----+----+----+
  • 对于您正在使用的功能,必须在您的环境中安装
    xlrd
    模块,但不需要导入
  • 如果您想在
    df.loc()
    的两个维度上自由使用整数索引,我建议您在
    pd.read\u excel()
    上使用参数
    header=None
Excel文件:

    +----+----+----+
    | A  | B  | C  |
+------------------+
|   |    |    |    |
| 1 | hi | hi | hi |
|   |    |    |    |
+------------------+
|   |    |    |    |
| 2 | hi | hi | hi |
|   |    |    |    |
+------------------+
|   |    |    |    |
| 3 | hi | hi | hi |
|   |    |    |    |
+---+----+----+----+
带有自动标题:(这些是字符串。您必须执行
df.loc[0,“hi.0”]

输出:

    +--------------+
    |hi.1|hi.2|hi.3|
+------------------+
|   |    |    |    |
| 0 | hi | hi | hi |
|   |    |    |    |
+------------------+
|   |    |    |    |
| 1 | hi | hi | hi |
|   |    |    |    |
+------------------+
    +----+----+----+
    | 0  | 1  | 2  |
+------------------+
|   |    |    |    |
| 0 | hi | hi | hi |
|   |    |    |    |
+------------------+
|   |    |    |    |
| 1 | hi | hi | hi |
|   |    |    |    |
+------------------+
|   |    |    |    |
| 2 | hi | hi | hi |
|   |    |    |    |
+---+----+----+----+
不带标题:(这些是整数。您可以安全地执行
df.loc[0,2]

输出:

    +--------------+
    |hi.1|hi.2|hi.3|
+------------------+
|   |    |    |    |
| 0 | hi | hi | hi |
|   |    |    |    |
+------------------+
|   |    |    |    |
| 1 | hi | hi | hi |
|   |    |    |    |
+------------------+
    +----+----+----+
    | 0  | 1  | 2  |
+------------------+
|   |    |    |    |
| 0 | hi | hi | hi |
|   |    |    |    |
+------------------+
|   |    |    |    |
| 1 | hi | hi | hi |
|   |    |    |    |
+------------------+
|   |    |    |    |
| 2 | hi | hi | hi |
|   |    |    |    |
+---+----+----+----+
  • 我试图说明这种差异的原因是,当你说,“当我在转换p=str(p)后调用print(p)时,它给了我想要的东西,并且有了标题”,我担心你所说的“有标题”是什么意思。它应该是一根绳子。如果你得到了 在这个模式中,可能只测试第一行

好了,该从桥上跳下去了。谢谢你指出括号,这可能就是Thonny说line什么都没做的原因。至于你剩下的答案,我会在午饭后读一读!你用熊猫展示的方法是我整个上午都在尝试的,我粘贴了你的代码并做了一些调整,它实现了我想要的!我想我会像naccode建议的那样使用xldr,因为它看起来更像我习惯使用的VBA,但是谢谢你的解释!真不敢相信这有多容易!看起来与VBA的Range(“LetterNumber”)函数完全相同。我将阅读xlrd,并启动我的系统并运行。非常感谢。