gpt4 book ai didi

python - 使用 pandas 选择数据

转载 作者:太空宇宙 更新时间:2023-11-03 17:13:31 25 4
gpt4 key购买 nike

我有一个很大的目录,我根据以下标准从中选择数据:

columns = ["System", "rp", "mp", "logg"]
catalog = pd.read_csv('data.txt', skiprows=1, sep ='\s+', names=columns)

# CUTS
i = (catalog.rp != -1) & (catalog.mp != -1)

new_catalog = pd.DataFrame(catalog[i])
print("{0} targets after cuts".format(len(new_catalog)))

当我执行上述削减时,代码工作正常。接下来,我想再添加一个剪切:我想选择所有具有 4.0 < logg < 5.0 的目标。 。然而,一些目标有 logg = -1 (这代表该值不可用)。幸运的是,我可以计算logg从其他可用参数。这是我更新的剪辑:

# CUTS
i = (catalog.rp != -1) & (catalog.mp != -1)
if catalog.logg[i] == -1:
catalog.logg[i] = catalog.mp[i] / catalog.rp[i]
i &= (4 <= catalog.logg) & (catalog.logg <= 5)

但是,我收到一个错误: if catalog.logg[i] == -1:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

有人可以解释一下我做错了什么以及如何解决它。谢谢

编辑 1

我的数据框如下所示:

Data columns:
System 477 non-null values
rp 477 non-null values
mp 477 non-null values
logg 477 non-null values
dtypes: float64(37), int64(3), object(3)None

编辑2

 System  rp  mp  logg   FeH  FeHu  FeHl  Mstar  Mstaru  Mstarl  
0 target-01 5196 24 24 0.31 0.04 0.04 0.905 0.015 0.015
1 target-02 5950 150 150 -0.30 0.25 0.25 0.950 0.110 0.110
2 target-03 5598 50 50 0.04 0.05 0.05 0.997 0.049 0.049
3 target-04 6558 44 -1 0.14 0.04 0.04 1.403 0.061 0.061
4 target-05 6190 60 60 0.05 0.07 0.07 1.194 0.049 0.050

....

[5 rows x 43 columns]

编辑3

我理解的格式的代码应该是:

for row in range(len(catalog)):
parameter = catalog['logg'][row]
if parameter == -1:
parameter = catalog['mp'][row] / catalog['rp'][row]
if parameter > 4.0 and parameter < 5.0:
# select this row for further analysis

但是,我正在尝试以更简单和专业的方式编写我的代码。我不想使用for环形。我该怎么做?

编辑4

考虑以下小示例:

System     rp   mp    logg
target-01 2 -1 2 # will NOT be selected since mp = -1
target-02 -1 3 4 # will NOT be selected since rp = -1
target-03 7 6 4.3 # will be selected since mp != -1, rp != -1, and 4 < logg <5
target-04 3.2 15 -1 # will be selected since mp != -1, rp != -1, logg = mp / rp = 15/3.2 = 4.68 (which is between 4 and 5)

最佳答案

你会得到错误,因为catalog.logg[i]不是一个标量,而是一个序列,所以你应该转向矢量化操作:

catalog.loc[i,'logg'] = catalog.loc[i,'mp']/catalog.loc[i,'rp']

这会就地修改 logg 列

至于编辑3:

rows=catalog.loc[(catalog.logg > 4) & (catalog.logg < 5)]

它将选择满足条件的行

关于python - 使用 pandas 选择数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33868598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com