python处理问题汇总二(重复值索引,顺序读取文件,drop函数,数组元素排名)

1. python处理重复值索引问题

python3 的index函数只能索引要查找元素的首个索引,这个在多数情况是不能满足索引要求的。

listA = [1, 2, 3, 2]
print(listA.index(2))

1

而enumerate函数可以遍历所有元素,可以利用这个函数+列表推导式实现获取所有重复元素的索引值。

listA = [1, 2, 3, 2]  #比如要查找列表中的数字2。
indexA = [x for (x, m) in enumerate(listA) if m == 2]
print(indexA)

1,3

listA = [1, 2, 3, 2]
for (x, m) in enumerate(listA):
    if m == 2:
        print(x)

1
3

2.python读取文件夹列表的问题

os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。

但这样获取的文件名是没有顺序的。

单纯的filenames.sort()会以1101001000.。。这样的方式读入文件名。

因此,对于这种0.csv, 1.csv, 2.csv……10.csv文件列表,只需要在

filenames=os.listdir()下一行代码中加入 
filenames.sort(key=lambda x:int(x[:-4]))

就可以解决顺序读取文件的问题了。

对于带字符串的,如下:
在这里插入图片描述
可以先把两边的字符去掉,对比数字排序即可:

path_list.sort(key=lambda x: int(x.split('r_theta_interp_')[1].split('.csv')[0]))

总之,就是去掉文件名多余字符,只剩下数字,排序,即可。

3. dataframe删除指定行、列

1)drop函数
df.drop()  # drop删除行或列的内容

删除前两行

df.drop([0, 1])

删除最后一行

df.drop([len(list)-1])

删除行名为name的行
删除列名为name的列

df.drop(["name"])  # 默认删除行
df.drop(["name"], axis=1)  # 列需要加axis=1
2)inplace参数

凡是会对原数组作出修改并返回一个新数组的,往往都有一个 inplace可选参数。如果手动设定为True(默认为False),那么原数组直接就被替换。

DF= DF.drop('column_name', axis=1);
DF.drop('column_name',axis=1, inplace=True)

采用inplace=True之后,原数组名(如2情况所示)对应的内存值直接改变;而采用inplace=False之后,原数组名对应的内存值并不改变,需要将新的结果赋给一个新的数组或者覆盖原数组的内存位置(如1情况所示)。

4. argsort数组索引排名到元素排名

对于数组元素进行索引排名时,可以使用np.argsort()返回索引排名,是按照索引从小到大,如下:

result = [9, 4, 3, 7]
# input result as a tuple
# result = np.array(result)
result_arg = np.argsort(result)
print(result_arg)

[2 1 3 0]

元素3最小,3对应的索引为2,排在第一个位置,元素9最大,索引为0,排在最后一个位置。

如果想要对元素进行排名:

result = [9, 4, 3, 7]
# input result as a tuple
result = np.array(result)
result_arg = np.argsort(result)
result_rank = np.zeros(len(result_arg))
for i in range(len(result_arg)):
    result_rank[result_arg[i]] = i
print(result_rank.tolist())

[3.0, 1.0, 0.0, 2.0]

9最大,对应3.0, 3最小,对应0.0

或者,使用两次argsort()

result = [9, 4, 3, 7]
# input result as a tuple
result = np.array(result)
result_arg = np.argsort(result)
print(result_arg)
result_arg = np.argsort(result_arg)  # 两次argsort和上面是一样的效果
print(result_arg)

[2 1 3 0]  # 索引排名
[3 1 0 2]  # 元素排名
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值