Pandas基本操作

具体数据文件

1、apply()函数

  通过pandas新增一列,值为将时间戳转化成日期。例如1600123456 -> 20200914

import pandas as pd
import time
def get_year_month_day(row):
    """将时间戳转化成日期"""
    sc = time.gmtime(row.time)
    result = time.strftime("%Y%m%d", sc)
    return result[:8]
pd = pd.read_excel("info.xls")
print(pd)
pd["date"] = pd.apply(get_year_month_day,axis=1) #对列进行操作
print(pd.head())
View Code

 2、drop_duplicates()去重函数

  drop_duplicates(inplace=True,subset=['col1','col2'],keep='first')

    inplace=True 表示就地删除

    subset:某些列相同的删除

    keep : 值有first,last,False 分别表示保留重复项的第一个,保留最后一个,删除所有重复项,默认是first

import pandas as pd
pd = pd.DataFrame([[1,2,3],[3,4,5],[1,2,3],[1,1,3]])
pd.columns = ['a','b','c'] #给每列命名
print(pd)
#只删除a,b列完全相同的行数据,保留重复数据的最后一条
pd.drop_duplicates(inplace=True,keep="last",subset=['a','b'])
print(pd.head())
View Code

3、pivot_table()数据透视函数

  pivot_table(index='class',columns='subject',values='grades') (index或columns两个参数至少要有一个,values如果未指定,取均值)

    index : 拿出一个Series对象的值作为行名

    columns :  拿出一个Series对象的值作为列名

    values :拿出一个Series对象的值作为行列的值,形成一个二维视图。

    aggfunc : count(计数),max(最大值),min(最小值),mean(均值,默认)

import pandas as pd

df = pd.DataFrame({'student': ['小红', '小红', '李华', '李华', '小天', '小天'],
                    'class': ['001','001','001','001','002','002'],
                   'subject': ['C', 'Java', 'Python', 'C', 'C', 'Python'],
                   'grades': [80,  90, 78, 90, 80, 78]})
# print(df)
# print("-"*20)
"""
每个科目的均值
"""
#由于只有grade是数值类型,因此只对其求均值
df1 = df.pivot_table(index="subject")
# print(df1)
# print("-"*20)
"""
求每班均值
"""
df2 = df.pivot_table(columns="class")
# print(df2)
# print("-"*20)
"""
求每个班级各个科目的均分
"""
#由于数据只有grade数值型,values也可以省略
df3 = df.pivot_table(index="class",columns="subject",values="grades")
# print(df3)
# print("-"*20)
"""
求各个班级各个科目的最高分
"""
df4 = df.pivot_table(index="class",columns="subject",values="grades",aggfunc="max",fill_value=0)
# print(df4)
# print("-"*20)
"""
统计各个班级各个科目的人数
"""
df5 = df.pivot_table(index="class",columns="subject",values="grades",aggfunc="count",fill_value=0)
#print(df5)
# print("-"*20)
"""
求每个学生的最高分,最低分,平均分
"""
df6 = df.pivot_table(index="student",values="grades",aggfunc=['max',"min","mean"])
# print(df6)
# print("-"*20)
View Code

 4、merge()合并函数

  merge() df合并函数
  on="key" 以key关键字作为连接键。
  how = ['left','right','outer','inner'] 仅使用左边表的关键字,右边,交集,并集
 left : 仅考虑左边组合键的值
 right : 仅考虑右边组合键的值
  outer : 所有组合键的值,空值为NaN
 inner : 默认 ,所有组合键的有效值
import pandas as pd

eft = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'],
                      'key2': ['K0', 'K1', 'K0', 'K1'],
                         'A': ['A0', 'A1', 'A2', 'A3'],
                         'B': ['B0', 'B1', 'B2', 'B3']})

right = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'],
                      'key2': ['K0', 'K0', 'K0', 'K0'],
                         'C': ['C0', 'C1', 'C2', 'C3'],
                         'D': ['D0', 'D1', 'D2', 'D3']})
print(left)
print(right)
result1 = pd.merge(left,right,on=["key1","key2"])
#print(result1)
result2 = pd.merge(left,right,how='left',on=['key1','key2'])
print(result2)
result3 = pd.merge(left,right,how='outer',on=['key1','key2'])
print(result3)
View Code

 5、get_dummies() : 将离散值one-hot化

  get_dummies() : 将一列离散值数据one-hot化
data:df["salary"]
prefix : 前缀
prefix_seq : 前缀与值的连接符
import pandas as pd

all = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'],
                     'key2': ['K0', 'K1', 'K0', 'K1'],
                     'A': ['A0', 'A1', 'A2', 'A3'],
                     'B': ['B0', 'B1', 'B2', 'B3']})
print(all['key1'])
all_left = pd.get_dummies(all["key1"],prefix="key1",prefix_sep="_")
print(all_left)
View Code

 6、concat()函数:合并两个视图

  参数值:

    data:两个需要合并的数据,放在一个列表

    axis: 在某个维度进行合并

import pandas as pd

data1 = pd.DataFrame({
    "col1":[1,1,1],
    "col2":[2,2,2]
})
data2 = pd.DataFrame({
    "col1":[3,3,3],
    "col2":[4,4,4]
})
all = pd.concat([data1,data2],axis=1)
print(all)
View Code

 

 

 






 

posted @ 2021-05-07 11:39  一笑任逍遥  阅读(191)  评论(0编辑  收藏  举报