如何修正Pandas代码,筛选Jabatan为'-'且持股数非'-'的股东名称?
解决方案
你的核心需求是筛选Jabatan列为'-'且Jumlah Lembar Saham列不为'-'的行,提取这些行的Nama值。原代码的问题在于多次覆盖筛选结果,且最后用了错误的条件(df[POSITION] == True),完全偏离了目标逻辑。
直接用Pandas的布尔索引就能高效实现需求,修正后的代码如下:
import pandas as pd input_csv_file = "./CSV/Officers_and_Shareholders.csv" COLUMNS = ['Nama', 'Jabatan', 'Alamat', 'Klasifikasi Saham', 'Jumlah Lembar Saham', 'Total'] df = pd.read_csv(input_csv_file, skiprows=11, on_bad_lines='skip', names=COLUMNS) df.fillna('', inplace=True) NAME = 'Nama' NUMBER_OF_SHARES = "Jumlah Lembar Saham" POSITION = "Jabatan" # 构造筛选条件:Jabatan是'-',且Jumlah Lembar Saham不是'-' filter_condition = (df[POSITION] == '-') & (df[NUMBER_OF_SHARES] != '-') # 筛选符合条件的行,提取Nama列转为列表 shareholders_list = df.loc[filter_condition, NAME].tolist() print(shareholders_list)
代码说明:
filter_condition直接对应你要的两个条件,用&连接(注意Pandas中布尔条件要用括号包裹,避免运算优先级问题)df.loc[filter_condition, NAME]精准提取符合条件行的Nama列数据- 最后用
.tolist()转成你需要的列表格式
运行这段代码后,就能得到你期望的结果:
['PT CTCORP INFRASTRUKTUR D INDONESIA,', 'I E S M PT INTRERPORT PATIMBAN AGUNG,', 'PT PATIMBAN MAJU BERSAMA,', 'PT TERMINAL PETIKEMAS SURABAYA,']
内容的提问来源于stack exchange,提问作者htm_01
相关产品推荐
相关产品推荐

