如何创建 python 对数据帧执行多项检查的函数?
How to create python function that performs multiple checks on a dataframe?
我有多个库存 table,如下所示:
line no
-1 qty
-2 qty
1
-
3
2
42.1 FT
-
3
5
-
4
-
10 FT
5
2
1
6
6.7
-
或
line no
qty
1
2
2
4.5 KG
3
5
4
5
13
6
AR
我想使用 python 为数量列创建逻辑检查。 (table 可能有多个 qty 列,我需要能够检查所有这些列。在这两个示例中,我都将 table 格式化为数据帧。)
接受table 条件:
- 带或不带“EA”的整数(意思是每个)
- “AR”(根据需要)
- 带度量单位的整数或浮点数
- 如果有多个 QTY 列,则也接受“-”(第一个 table)
我想 return 每页一个列表,包含行号。对应于缺少数量值的行(第 4 行,第二个 table)或不符合验收标准(第 6 行,table 1)。如果该行通过检查,则 return True
.
我试过:
qty_col = [col for col in df.columns if 'qty' in col]
df['corr_qty'] = np.where(qty_col.isnull(), False, df['line_no'])
但这会将数量列创建为列表并生成以下内容
AttributeError: 'list' object has no attribute 'isnull'
简介和建议:
欢迎来到 Whosebug。在 S.O 上提问时的一些一般提示。包含尽可能多的信息。此外,请始终确定您要使用的库和可接受的方法,因为同一个问题可能有多种解决方案,看来您已经做到了。
此外,最好始终分享所有(如果不是)您尝试过的大部分解决方案,以便其他人可以理解思考过程并充分理解提供潜在解决方案的最佳方法。
解决方法:
不清楚您正在寻找的解决方案是否需要您阅读 PDF 来创建数据框,或者是否将 PDF 转换为 CSV 并使用 CSV 处理数据就足够了。我采用了后一种方法。
import tabula as tb
import pandas as pd
#PDF file path
input_file_path = "/home/hackernumber7/Projects/python/resources/Pandas_Sample_Data.pdf"
#CSV file path
output_file_path = "/home/hackernumber7/Projects/python/resources/Pandas_Sample_Data.csv"
#Read the PDF
#id = tb.read_pdf(input_file_path, pages='all')
#Convert the PDF to CSV
cv = tb.convert_into(input_file_path, output_file_path, "csv", pages="all")
#Read initial data
id = pd.read_csv(output_file_path, delimiter=",")
#Print the initial data
print(id)
#Create the dataframe
df = pd.DataFrame(id, columns = ['qty'])
#Print the data as a DataFrame object; boolean values when conditions met
print(df.notna())
我有多个库存 table,如下所示:
line no | -1 qty | -2 qty |
---|---|---|
1 | - | 3 |
2 | 42.1 FT | - |
3 | 5 | - |
4 | - | 10 FT |
5 | 2 | 1 |
6 | 6.7 | - |
或
line no | qty |
---|---|
1 | 2 |
2 | 4.5 KG |
3 | 5 |
4 | |
5 | 13 |
6 | AR |
我想使用 python 为数量列创建逻辑检查。 (table 可能有多个 qty 列,我需要能够检查所有这些列。在这两个示例中,我都将 table 格式化为数据帧。)
接受table 条件:
- 带或不带“EA”的整数(意思是每个)
- “AR”(根据需要)
- 带度量单位的整数或浮点数
- 如果有多个 QTY 列,则也接受“-”(第一个 table)
我想 return 每页一个列表,包含行号。对应于缺少数量值的行(第 4 行,第二个 table)或不符合验收标准(第 6 行,table 1)。如果该行通过检查,则 return True
.
我试过:
qty_col = [col for col in df.columns if 'qty' in col]
df['corr_qty'] = np.where(qty_col.isnull(), False, df['line_no'])
但这会将数量列创建为列表并生成以下内容
AttributeError: 'list' object has no attribute 'isnull'
简介和建议:
欢迎来到 Whosebug。在 S.O 上提问时的一些一般提示。包含尽可能多的信息。此外,请始终确定您要使用的库和可接受的方法,因为同一个问题可能有多种解决方案,看来您已经做到了。
此外,最好始终分享所有(如果不是)您尝试过的大部分解决方案,以便其他人可以理解思考过程并充分理解提供潜在解决方案的最佳方法。
解决方法:
不清楚您正在寻找的解决方案是否需要您阅读 PDF 来创建数据框,或者是否将 PDF 转换为 CSV 并使用 CSV 处理数据就足够了。我采用了后一种方法。
import tabula as tb
import pandas as pd
#PDF file path
input_file_path = "/home/hackernumber7/Projects/python/resources/Pandas_Sample_Data.pdf"
#CSV file path
output_file_path = "/home/hackernumber7/Projects/python/resources/Pandas_Sample_Data.csv"
#Read the PDF
#id = tb.read_pdf(input_file_path, pages='all')
#Convert the PDF to CSV
cv = tb.convert_into(input_file_path, output_file_path, "csv", pages="all")
#Read initial data
id = pd.read_csv(output_file_path, delimiter=",")
#Print the initial data
print(id)
#Create the dataframe
df = pd.DataFrame(id, columns = ['qty'])
#Print the data as a DataFrame object; boolean values when conditions met
print(df.notna())