说明:写这个博客是本人在做毕设时发现有时候处理数据会用到一些网上的教程中没有且很有用的小知识。而且有些在找的时候会比较麻烦,所以打算记录下来以备不时之需,另外以下的所有代码的Python版本为3.5,且以后可能会更新。
1、字典(dict)根据值(value)取对应的键(key)
可以根据字典推导式反转原字典的key和value,然后根据value选key。
a_dict = {'a':1,'b':2,'c':3}
print(a_dict)
a_new_dict = {v: k for k,v in a_dict.items()}
print(a_new_dict)
print(a_new_dict[1])
运行结果:
{'c': 3, 'a': 1, 'b': 2}
{1: 'a', 2: 'b', 3: 'c'}
a
2、用字典(dict)表示一对多的对应关系
当需要表示一个一对的的关系时,可以用dict来实现,只不过是把value换成了一个列表(list)而已。
list_1 = ['Gray','Harry','Bob']
dict_1 = {'name':list_1}
print(dict_1)
运行结果:
{'name': ['Gray', 'Harry', 'Bob']}
注:当需要访问指定key的某个值时可以用dict_1[key][i]
来进行访问
3、对列表(list)中元素进行去重
有时会对list中的元素进行去重处理,就可以利用下面几种办法:
1、先将list转为set再转回list
list_1 = [4,6,3,2,1,1,2,3,1,4,5]
list_2 = list(set(list_1))
print(list_2)
运行结果:
[1, 2, 3, 4, 5, 6]
2、 利用dict的fromkeys()方法(key唯一性)
list_1 = [4,6,3,2,1,1,2,3,1,4,5]
list_2 = list(dict.fromkeys(list_1).keys())
print(list_2)
运行结果:
[1, 2, 3, 4, 5, 6]
注:从上面的结果可以看的出来,这两种方法会将原来的顺序打乱,如果你的数据与顺序相关就不要用这两种办法了
3、利用sorted方法
list_1 = [4,6,3,2,1,1,2,3,1,4,5]
list_2 = sorted(set(list_1),key = list_1.index)
print(list_2)
运行结果:
[4, 6, 3, 2, 1, 5]
4、可以利用遍历来实现
list_1 = [4,6,3,2,1,1,2,3,1,4,5]
list_2 = []
for i in list_1:
if not i in list_2:
list_2.append(i)
print(list_2)
运行结果:
[4, 6, 3, 2, 1, 5]
5、pandas.DataFrame根据需求去除指定的行
在DataFrame中想要得到指定的行是很容易的,在很多的pandas教程中都会提到,但是想要得到除了这些行以外的其他行的数据就有点麻烦了,看下面的例子:
import pandas as pd
df_1 = pd.DataFrame([['Bob','Gray','Dave'],['Trae','Tore','John'],['Amy','Kim','Mary'],['David','James','Sunny']],columns = ['c1','c2','c3'])
print(df_1)
运行结果:
c1 c2 c3
0 Bob Gray Dave
1 Trae Tore John
2 Amy Kim Mary
3 David James Sunny
如果想要得到c1这列除了值为’Bob’和’Amy’的其他所有行,就可以用下面的方法:
list_1 = list(df_1.c1)
list_1.remove('Bob')
list_1.remove('Amy')
df_2 = df_1[df_1.c1.isin(list_1)]
print(df_2)
运行结果:
c1 c2 c3
1 Trae Tore John
3 David James Sunny
注:如果想要新生成的DataFrame使用新的索引可以利用df_2.reset_index(drop = True)
实现