python - 使用 pandas 将 xlsx 文件中的特定行添加到列表

标签 python excel pandas

我想将 xlsx 文件的一些行添加到打开列表中,但不知道如何执行此操作。 我有几个 xlsx 文件,其中包含如下数据:

     A    B    C    D    E    F    G    H
1   A10   2        A10   2             AB
2   A105  1        A105  2             AB  
....
10  A250  4        A250  4             AB  

我希望将 E 列的单元格值减去 B 列的单元格值之和不等于 0 的行添加到列表中。因此,在上面的示例中,我只想将第二行添加到列表中,因为 2 - 1 是 1 而不是零。所以列表应该包含以下内容:

  A105  1    A105  2   AB

我不知道如何实现这一点,并且已经尝试了一些方法,包括 pandas 和 openpyxl,但我还没有做好。有人可以帮助我吗?

这是代码的开头:

import pandas as pd
import glob

numbers = []
rapp = r"C:\Myfolder
files = glob.glob(rapp)
for file in files:
    df = pd.read_excel(excelfile)
    if df.iloc[:,4] - df.iloc[:,1] != 0:   #I get an errormessage on this, and do not know how to express this properly.
        numbers =     #I do not know what to write here either, as I somehow need it to be row.tolist()

Traceback:
if df.iloc[:,4] - df.iloc[:,1] != 0:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

感谢您的帮助!

最佳答案

pandas 使用数组时存在问题,而不是标量。

比较的输出是:

print ((df.iloc[:, 4] - df.iloc[:, 1]) != 0)
0    False
1     True
2    False
dtype: bool

有 2 个 False 和 1 个 True

并且不能使用if,因为python是困惑 - 有TrueFalse - 什么是输出?

您可以先比较列EB,按boolean indexing过滤与 loc对于选择列和输出,请访问列表:

m = df['E'].ne(df['B'])
print (m)
0    False
1     True
2    False
dtype: bool

解决方案 iloc :

m = df.iloc[:, 4].ne(df.iloc[:, 1])
pos = [0,1,3,7]
print (df.loc[m, df.columns[pos]].values.tolist())
[['A105', 1, 'A105', 'AB']]

编辑您的解决方案:

m = (df.iloc[:, 4] - df.iloc[:, 1]) != 0
pos = [0,1,3,7]
print (df.loc[m, df.columns[pos]].values.tolist())
[['A105', 1, 'A105', 'AB']]

多列的解决方案:

print (df)
      A  B   C     D  E   F   G   H
0   A10  2 NaN   A10  2 NaN NaN  AB
1   A10  3 NaN   A10  2 NaN NaN  AB
2  A105  1 NaN  A105  2 NaN NaN  AB
3  A250  4 NaN  A250  4 NaN NaN  AB

m = (df.iloc[:, 4] - df.iloc[:, 1]) != 0
print (m)
0    False
1     True
2     True
3    False
dtype: bool

pos = [0,1,3,7]
print (df.loc[m, df.columns[pos]].values.tolist())
[['A10', 3, 'A10', 'AB'], ['A105', 1, 'A105', 'AB']]

关于python - 使用 pandas 将 xlsx 文件中的特定行添加到列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45583823/

相关文章:

python - Pandas:在每列的每个时间戳处找到非 NaN 记录的累积总和

python - Pandas df.loc 比较浮点条件从不工作

python - 数据帧 : how do I find value in one column for a quantile in a second column

python - Notepad++ 正则表达式每隔一个字符位置插入随机字母或数字

python - 如何按字符串而不是按字符拆分列表中的值?

coding-style - Python求和式问题

c# - 通过 SqlBulkCopy 导入 Excel 文件时出现不同的错误

python - PyGTK TreeView 中的自动换行

vba - XLS - 在 VBA 中复制和粘贴 - PasteSpecial 方法失败

excel - 使用搜索和循环从一张纸复制并粘贴到另一张纸