gpt4 book ai didi

python - 根据条件从数据帧列表中删除数据帧

转载 作者:行者123 更新时间:2023-11-28 20:55:27 25 4
gpt4 key购买 nike

我有一个脚本可以创建要连接的数据帧列表。在连接之前,我正在检查每个数据帧中的特定列是否存在“1”二进制标志。如果没有,我想从数据帧列表中删除数据帧。我遇到了麻烦,因为我不确定如何正确索引列表以删除数据框。我用这段代码重现了问题。

data = {'Name':['Tom', 'Tom', 'Tom', 'Tom'], 'Age':[20, 21, 19, 18]} 
data2 = {'Name':['Tom', 'nick', 'krish', 'jack'], 'Age':[20, 21, 19, 18]}

# Create DataFrame
df = pd.DataFrame(data)
df2 = pd.DataFrame(data2)
df3 = pd.DataFrame(data)
df4 = pd.DataFrame(data2)

dflist = [df, df2, df3, df4]


for frame in dflist:
vals = frame["Name"].values
if 'krish' not in vals:
dflist.remove(frame)

但是

ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我还尝试枚举列表并基于 dflist[i] 删除,但如果删除某些内容,则会更改索引,因此随后将删除错误的帧。

根据条件从 df 列表中删除数据帧的正确方法是什么?谢谢!

最佳答案

与其在迭代时从列表中删除项目(这通常是一种不好的做法),不如使用列表理解来生成一个包含感兴趣的数据框的新列表:

[i for i in dflist if 'krish' not in i['Name'].values]

Name Age
0 Tom 20
1 Tom 21
2 Tom 19
3 Tom 18, Name Age
0 Tom 20
1 Tom 21
2 Tom 19
3 Tom 18]

如果数据帧非常大,可以使用以下安全方法从原始列表中删除不需要的数据帧:

ix = []
for i, frame in enumerate(dflist):
vals = frame["Name"]
if not vals.isin(['krish']).any():
ix.append(i)

# sort the indices of dataframes to drop
# by starting from higher to lower indices you're guaranteed
# that the indices on the dataframe will remain unmodified while deleting
for i in sorted(ix, reverse=True):
del dflist[i]

关于python - 根据条件从数据帧列表中删除数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56793319/

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