Pandas常用的功能函数和数据处理技巧
修改列名称
file_data = pd.read_csv(‘data.csv’)
file_data.rename(columns = {file_name.columns[0]:’new_name’}, inplace=True)
# inplace表示是否要原地修改,原地修改意味着不用重新赋值
重置索引值
首选:
df_new = df.reset_index(drop=True)
删除某行之前的和某行之后的数据
new_df = df.truncate(before=2, after=4)
Map操作
如果想对某咧进行操作,比如,某列中的数据内容是1.男,类似这种方式,我想把1.去掉,这个时候怎么去做,可以这样:
file_data.columns = file_data.columns_name.map(lambda x: x.split('.')[-1])
如果想访问某一列的数据
df.columns_name 或者 df[‘columns_name’]
数据的可视化
%matplotlib inline
plt.hist(df.columns_name)
删除缺失值,注意这里需要赋值操作,不然是不生效的
new_df = df.dropna()
其中有个参数为how,一行中都有缺失才删除
new_df = df.dropna(how=‘all’)
填补缺失值(用均值)
new_data.fillna(mean)
使用前向来填充
new_data.fillna(method=‘ffill’)
使用后向来填充
new_data.fillna(method=‘bfill’)
使用常量来填补缺失值
pd.fillna({‘x’:2,’y’:3})
标记重复值
df.duplicated()返回的是布尔值,是否重复
删除重复值
如果按照某些特征进行重复比较和删除
new_df = df.drop_duplicates(['a','b'])
汇总函数
横向或者纵向汇总
df.sum(axis=0,skipna=False)
如果用pd.read_csv读取文件的时候要注意
如果csv文件中没有列名的时候,可以操作如下指定列名
# 如果读取的csv没有列名,可以用这种方式增加列名
df = pd.read_csv('a.csv',names=['var1','var2'])
如果想用数据中的某列作为索引,可以这样写
df = pd.read_csv('a.csv',names=['var1','var2'],index_col='var1')
其中还有sep参数,默认的是逗号作为分隔符,如果是别的符号可以修改
如果文件的开头有注释,这时候你可以选择要跳过的行数
# 实现忽略前两行,读取以逗号分隔的csv文件
df = pd.read_csv('a.csv',skiprows=[0,1],sep=',')
这个时候会忽略前两行。
如果想要读取指定前N行,可以用这样的参数
# 表示读取该csv文件的前1000行
df = pd.read_csv('a.csv',nrows=1000)
设定条件进行赋值
# 对col1的值为4,并且col2列的值为5,满足这种前提,对y_hat列的值,赋值为-999
df.loc[(df['col1']==4)&(df['col2']==5),'y_hat'] = -999
对某些值进行替换
# 对于df中的各个值,如果有1,2,3,4,5的值,替换为999
new_df = df.replace([1,2,3,4,5],999)
对data中的1,2,3,4,替换为np.nan,这个时候并没有对data本身的数据进行替换操作。要进行赋值才能够保留替换后的数据。
也可以是字典的形式:
# 将df中值为-999的替换为None,将-1000替换为0
df = df.replace({-999:np.nan,-1000:0})
将连续值进行离散化(面元)
ages = [20,23,34,55,67,25,40,89,100,12,20,39]
bins = [10,20,30,40,50,100]
cats = pd.cut(ages,bins)
cats.codes
>>> array([0, 1, 2, 4, 4, 1, 2, 4, 4, 0, 0, 2], dtype=int8)
在pandas对象添加一行
# point_content 为指定的行
df.append(point_content,ignore_index=True)
Ignore_index 表示的是忽略添加行的索引
如果已知两个表,想要做一个连接,左连接或者右连接:
# 按照a的id1和b的id2列做一个右连接;on里面是key
# 意思就是a中的id1和b中的id2值相同的部分
new_df = pd.merge(a,b,how='left',on=['id1','id2'])
如果将索引从1开始,不希望从0开始
df = df.index + 1