Python Pandas几个小Tips

1、多范围选取值

dataframe中可以使用 loc 和 iloc 选择数据。
loc 使用行标签或列标签选择数据,而 iloc 使用索引号。
而当我们想要的数据不是连续排列在一起时,即想要的数据不是一个范围的。如你想要数据框中前两列以及10到15列的数据,那么如何做呢?
使用np.r_

import numpy as np
import pandas as pandas
df = pd.read_csv('scores_data.csv')
#取前两列以及第10列至第15列的数据
df1=df.iloc[:,np.r_[0:2,10:16]]

2、如何查看dataframe中某一列的唯一值

pd.value_counts(df['education'])

3、返回数据中的重复行

# 检查数据中的重复
index=df.duplicated()
df[index]

4、列合并

一个场景是:有两个文件,其中一个文件是只有列名(a),另一个文件既有列名也有数据(b),需求是是想要两个文件的列进行合并,列顺序与a文件相同,且要有b的数据。

import pandas as pd
df1=pd.read_csv('a.csv')
df2=pd.read_csv('b.csv')
df1[df2.columns]=df2[df2.columns]

这样,未匹配的列的值为NaN

然而一开始的我很智障用了循环。。

df1 = pd.read_csv('b.csv')
df2 = pd.read_csv('a.csv')
for column in df2.columns:
     if column not in df1.columns:
         df1[column]='NaN'
frame1=pd.DataFrame(df1,columns=df2.columns)

5、列去重

一个场景是:boss给了一个list,里面是列名,但是有重复的。需要进行过滤,且保留顺序在前面的。
可以先用set去重,接着重新排序

a=['a','b','c','d','a']
b=list(set(a))
b.sort(key=a.index)

可以用Counter()看出具体哪个值重了

from collections import Counter
Counter(a)

6、修改列数据类型

(1)从字符串中提取整数

df['columns_name']=df['columns_name'].str.extract('(\d+)').astype(int)

(2)将浮点转换为整数

df['columns_name']=df['columns_name'].astype(int)

(3)在创建一个DataFrame时,可以直接通过dtype参数指定类型

df = pd.read_csv("somefile.csv", dtype = {'column_name' : str})

当某个列read_csv时被认定是int,那么值会发生变化,在read_csv之后再进行dtypes没有用,所以可以在read_csv的时候就dtype指定类型。
一个case是:在linux中grep 机构代码,发现是存在值的,但是read_csv之后,查看列数据类型发现是int64,进而采用astype没有用,发现值已经发生了变化(如0012会变成12?),采取在read_csv时就指定参数类型的方法可以避免这种情况发生。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值