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时就指定参数类型的方法可以避免这种情况发生。