Pandas学习笔记

本内容来自于学习笔记或者网络搜索资料,难免存在复制粘贴或者错误,请大家多多包涵

1.Series 一维
pd.Series(data,index,dtype)数据,索引,类型
创建
a = pd.Series([1,2,3,4])
print(a)
# 0    1
# 1    2
# 2    3
# 3    4
# dtype: int64

b = np.arange(1,6)
print(b)
# [1 2 3 4 5]

c = pd.Series(b)
print(c)
# 0    1
# 1    2
# 2    3
# 3    4
# 4    5
# dtype: int64

dic = {'li':1,'liu':2,'wang':3} #字典
h = pd.Series(dic)
print(h)
f = pd.Series(dic,index=['li','wei'])
print(f)
f1 = pd.Series(5,[0,1,2])  #自动填充
print(f1)

2.DataFrame 二维

创建
pd.DataFrame(data=数据,index=,columns=,dtype=数据类型)
a = np.random.randint(0,16,(3,4))
b = pd.DataFrame(a,index=['a','b','c'],columns=['x','y','z','h'])
print(b)
dic = {'li':1,'liu':2,'wang':3} #字典
c = pd.Series(dic)
print(c)
d = pd.DataFrame(c)
print(d)
d1 = pd.DataFrame(c,columns=['age']) #加行标头
print(d1)
d2 = pd.DataFrame({'age':dic})
print(d2)
dic2 = {'li':'a','liu':'b','wang':'c'}
d3 = pd.DataFrame({'age':dic,'higt':dic2}) #两个字典的合集
print(d3)
d4 = pd.DataFrame({'age':dic,'higt':dic2,"country":"china"})  #加入属性
print(d4)

3.属性
print(d4.values)  #numpy的数据类型
print(d4.index)   #取出列名
print(d4.columns)  #取出行名
print(d4.shape)  # 类型
print(d4.size)   # 个数
print(d4.dtypes)  #行数据类型

4.索引和切片
print(d4['age']) #取列
print(d4.age)
print(d4.loc['li']) #取行
print(d4.loc[['li','liu']])#取多行,不能用逗号,要用列表
print(d4.loc['li':'liu'])  #取多行,切片形式
print(d4.loc['li':'wang']) #从什么到什么
print(d4.iloc[0])   #取行用索引
print(d4.iloc[[0,1,2]])  #索引取多行,里面直接写要取的行数
print(d4.loc['li','age']) #取具体的数值,写行列
print(d4.iloc[0,0])    #取具体的数值,用索引的方法
print(d4.values[0][0])  #numpy
print(d4.iloc[:1,:])    #索引取具体的数值
print(d4.age >0)   #运算找条件筛选
print(d4[d4.age>0])
print(d4.age == 1)
print(d4[d4.age == 1])


5.赋值
d5 =d4.iloc[0,0] = 1 #????????
print(d5)

6.数据查看
dates = pd.date_range(start='2020-01-01',periods=6)
print(dates)
df = pd.DataFrame(np.random.randint(0,10,(6,4)),index=dates,columns=['A','B','C','D'])
print(df)
print(df.describe()) #查看基本的衡量标准
print(df.info())  #查看数据类型
print(df.head())  #默认前五行
print(df.head(2))
print(df.tail())  #默认后五行
print(df.tail(3))
print(df.T)  #转置
print(df.sort_index(axis=1,ascending=False))  #排序
print(df.sort_index(axis=0,ascending=False))
print(df.sort_values('B'))  #对B进行排序



7.计算
a = pd.DataFrame([1,2,3])
b = pd.DataFrame([1,2,3])
print(a)
print(a-2)
print(b)
print(a+b)
c = pd.DataFrame(np.random.randint(10,size=(1,3)))
print(c)
print(a@c)  #矩阵乘法
形状不一样的如何进行计算
a1 = pd.DataFrame(np.random.randint(0,20,(2,2)),columns=['A',"B"])
print(a1)
b1 = pd.DataFrame(np.random.randint(0,20,(3,3)),columns=['A',"B",'C'])
print(b1)
print(a1+b1)
print(a1.add(b1,fill_value =0)) #补充空缺值


8.缺失值
a = pd.DataFrame(np.arange(9).reshape((3,3)))
print(a)
a.iloc[:2,2] = np.nan
print(a)
print(a.dropna()) #扔掉缺失值的行
print(a.dropna(axis=1)) #扔掉缺失值的列
print(a.dropna(axis=1,how="all"))  #列全部为缺失值时才扔掉
print(a.fillna(value=0))  #缺失值用零来填充



9.合并对齐
a = pd.DataFrame(np.zeros((3,4)),columns=['a','b','c','d'])
b = pd.DataFrame(np.zeros((3,4)),columns=['a','b','c','d'])
print(a)
print(b)
print(pd.concat([a,b]))  #垂直合并
print(pd.concat([a,b],ignore_index=True)) #修改列标,按顺序标
print(pd.concat([a,b],axis=1))  #水平方向合并
特殊情况
a1 = pd.DataFrame(np.zeros((3,4)),index=[0,1,2],columns=['a','b','c','d'])
b1 = pd.DataFrame(np.zeros((3,4)),index=[1,2,3],columns=['b','c','d','e'])
print(pd.concat([a1,b1],axis=1))
c = pd.Series([1,2,3,4],index=['a','b','c','d'])
print(a1.append(c,ignore_index=True))  #加入新行

对齐
a = pd.DataFrame([[2,0],[3,1]],columns=['A','B'])
b = pd.DataFrame([[0,4],[1,5]],columns=['B','C'])
print(a)
print(b)
print(pd.merge(a,b)) #合并对齐
a1 = pd.DataFrame([[2,0],[3,1]],columns=['A','B'])
b1 = pd.DataFrame([[1,4],[0,5]],columns=['B','C'])
print(a1)
print(b1)
print(pd.merge(a1,b1)) #共有列数据不一样的时候,会自动调换适合的位置

10.分组
df = pd.DataFrame({'key':list('ABCCBA'),'data1':range(6),'data2':range(20,26)})
print(df.groupby('key'))
print(df.groupby('key').sum())
print(df.groupby('key').mean())
print(df.groupby('key')['data1'].mean()) #只求某一列
print(df.groupby('key')[['data1']].mean())
def func(x):
    x['data1'] /= x['data1'].sum()
    return x
print(df.groupby('key').apply(func))  #归一化

11.导入数据
pd.read_csv(filename):从CSV文件导入数据
pd.read_table(filename):从限定分隔符的文本文件导入数据
pd.read_excel(filename):从Excel文件导入数据
pd.read_sql(query, connection_object):从SQL表/库导入数据
pd.read_json(json_string):从JSON格式的字符串导入数据
pd.read_html(url):解析URL、字符串或者HTML文件,抽取其中的tables表格
pd.read_clipboard():从你的粘贴板获取内容,并传给read_table()
pd.DataFrame(dict):从字典对象导入数据,Key是列名,Value是数据

12.导出数据
df.to_csv(filename):导出数据到CSV文件
df.to_excel(filename):导出数据到Excel文件
df.to_sql(table_name, connection_object):导出数据到SQL表
df.to_json(filename):以Json格式导出数据到文本文件

13.数据清理
df.columns = ['a','b','c']:重命名列名
pd.isnull():检查DataFrame对象中的空值,并返回一个Boolean数组
pd.notnull():检查DataFrame对象中的非空值,并返回一个Boolean数组
df.dropna():删除所有包含空值的行
df.dropna(axis=1):删除所有包含空值的列
df.dropna(axis=1,thresh=n):删除所有小于n个非空值的行
df.fillna(x):用x替换DataFrame对象中所有的空值
s.astype(float):将Series中的数据类型更改为float类型
s.replace(1,'one'):用‘one’代替所有等于1的值
s.replace([1,3],['one','three']):用'one'代替1,用'three'代替3
df.rename(columns=lambda x: x + 1):批量更改列名
df.rename(columns={'old_name': 'new_ name'}):选择性更改列名
df.set_index('column_one'):更改索引列
df.rename(index=lambda x: x + 1):批量重命名索引

14.数据处理:Filter、Sort和GroupBy
df[df[col] > 0.5]:选择col列的值大于0.5的行
df.sort_values(col1):按照列col1排序数据,默认升序排列
df.sort_values(col2, ascending=False):按照列col1降序排列数据
df.sort_values([col1,col2], ascending=[True,False]):先按列col1升序排列,后按col2降序排列数据
df.groupby(col):返回一个按列col进行分组的Groupby对象
df.groupby([col1,col2]):返回一个按多列进行分组的Groupby对象
df.groupby(col1)[col2]:返回按列col1进行分组后,列col2的均值
df.pivot_table(index=col1, values=[col2,col3], aggfunc=max):创建一个按列col1进行分组,并计算col2和col3的最大值的数据透视表
df.groupby(col1).agg(np.mean):返回按列col1分组的所有列的均值
data.apply(np.mean):对DataFrame中的每一列应用函数np.mean
data.apply(np.max,axis=1):对DataFrame中的每一行应用函数np.max

注:11-14来自于粘贴复制,非本人整理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值