我想将 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是困惑
- 有True
和False
- 什么是输出?
您可以先比较列E
和B
,按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/