Python数据处理中能用到的小知识点

说明:写这个博客是本人在做毕设时发现有时候处理数据会用到一些网上的教程中没有且很有用的小知识。而且有些在找的时候会比较麻烦,所以打算记录下来以备不时之需,另外以下的所有代码的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)实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值