python对dataframe进行操作?

比方说这个dataframe,我要对它进行筛选,仅保留筛选后的数据。eg:我有一个列表ls1=['D','A'], listmesh是包含dataframe的mesh列的列表;我写一个循环:for i in ls1: for j in list_mesh: if i in j: ........就是想筛选出mesh列中含有ls1元素的那行数据,dataframe其他不属于的行就舍去。我想的是创建一个空的dataframe,如果循环中的if条件满足就向这个空dataframe写入对应的行数据。求求大佬们指点。!

建议参考一下dataframe文档,里面有相应的方法,不需要使用for循环遍历,for循环遍历会拖慢程序。对于dataframe中数据检索可以使用下面的方法。

【全部】df.values

【name列的数据】df['name'].values

【loc检索A列】df.loc['A']

【iloc进行行检索】df.iloc[0]

【直接使用名字进行列检索,但不适合行检索】df['name']

第一步:准备一些数据

根据你的描述生成的一堆数据

定义一些变量

TOPLST = ['A', 'B', 'C']   # top10
PATH = 'test.xls'            # 我生成的Excel测试文件位置

第二步:根据描述,你需要对比两个序列之间是否有交集?

这里简单定义一个函数(当然也可以不这样做):

def checkLst(lst1, lst2):
# 如果两个列表中有相同值,则返回True
for item in lst1:
if item in lst2:
return True
return False

第三步:实现我们的需求:这里主要还是使用索引,掌握dataframe的函数基础上,如何使用这些接口函数很重要。这里简单几行实现数据清洗功能。

def clearData(path, toplst):
df = pandas.read_excel(path)
# 找到需要判断的mesh列
mesh = df['mesh']
# 清除队列
clearilst = []
# 遍历每一行数据mesh.index是RangeIndex实例
for index in mesh.index:
# 判断top10和mesh列中是否有交集,如果没有交集则将索引加入删除队列
if not checkLst(toplst, mesh.iloc[index].split(';')):
# 将没有交集的行索引添加至清洗列表
clearilst.append(index)
# 清洗结果赋值
result = df.drop(index=clearilst, axis=0)
return result

完整的代码截图如下:

程序源代码

我们来看下运行效果:

运行效果展示

完美运行,不用操心索引+1的问题,也不用再创建一个DataFrame实例!

希望能够采纳!

追问

我看过这些操作,但是我感觉都不想要的。我是有一个筛选条件的,就如那个ls1列表,实际上这个列表应该有10个元素;然后就是listmesh一般都有100个元素。我是想筛选ls1中的元素是否在listmehs列表中,不在就跳过,在的话就获取list_mesh.index(i)+1(这样就刚好等于id索引),然后我根据id索引把这一行数据提取出来写到一个新的空dataframe里面去,

温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-11-02
用一个字符截取函数size就可以只读取其中的数字。
第2个回答  2021-11-02
几乎所有的dataframe的操作都用不上for循环。但感觉你的描述不清晰,不明白你到底要做什么
第3个回答  2021-11-02
筛选出mesh列中含有ls1元素的那行数据,dataframe其他不属于的行就舍去。我想的是创建一个空的dataframe,如果循环中的if条件满足就向这个空dataframe写入对应的行数据。求求大佬们指点。!追问

emmmm....

第4个回答  2021-11-02
fetchall这个返回的是多个元组,你找到通过列表名称,获取信息了?不通过下标获取
相似回答