Pandas-Python

Series

Pandas Series 类似表格中的一个列(column),类似于一维数组,可以保存任何数据类型

Series 由索引(index)和列组成

创建

从列表创建

# 带索引的一列数据
s1 = pd.Series([1, 2, 3, 4, 5])
[out]: 
0    1
1    2
2    3
3    4
4    5
dtype: int64

从 ndarray 创建

之前我们学习了 numpy,我们使用 np.arange() 函数来创建一个带索引的 Series 类型数据:

 # 索引为 a b c d e
s2 = pd.Series(np.arange(5), index=['a', 'b', 'c', 'd', 'e'])
print(s2)

[out]: 
a    0
b    1
c    2
d    3
e    4
dtype: int32

从字典创建


      # 创建一个字典,用key来构成表的索引
[in]: temp_dict = {"name": "zhangsan", "age": 27, "tel": 10086}
      # 字典数据直接传入data
[in]: s3 = pd.Series(temp_dict)
[in]: print(s3)
[out]:
name    zhangsan
age           27
tel        10086
dtype: object

切片与索引

import numpy as np
import pandas as pd

s1 = pd.Series(np.arange(4),index=["a","b","c","d"])

# 索引
print(s1[0])
print(s1["a"]) # 像字典一样索引

#切片
print(s1[:3])

out:
0
0
a    0
b    1
c    2
dtype: int64

向量化操作-列相加、相乘

import numpy as np
import pandas as pd

s1 = pd.Series(np.arange(3),index=['a','b','c'])
   # 对应位置相加
[in]: result1 = s2 + s2
[in]: print(result1)
[in]: print("-" * 50)  # 分割线
[out]:
a    0
b    2
c    4
d    6
e    8
dtype: int32
--------------------------------------------------
      # 对应位置相乘
[in]: result2 = s2 * s2
[in]: print(result2)
[in]: print("-" * 50)  # 分割线
[out]:
a     0
b     1
c     4
d     9
e    16
dtype: int32
--------------------------------------------------
      # 各个位置加2
[in]: result3 = s2 + 2
[in]: print(result3)
[out]:
a    2
b    3
c    4
d    5
e    6
dtype: int32

index 属性和 values 属性

通过 Series.index 查看索引, 通过 values 查看值

[in]: s = pd.Series(np.arange(5), index=list("abcde"))
[in]: print(s.index)
[out]:
Index(['a', 'b', 'c', 'd', 'e'], dtype='object')
[in]: print(s.values)
[out]:
[0 1 2 3 4]

DataFrame

类似于 excel 表 有行索引 列索引

pandas.DataFrame( data, index, columns, dtype, copy)

参数说明:

data:一组数据(ndarray、series, map, lists, dict 等类型)。
index:索引值,或者可以称为行标签。
columns:列标签,默认为 RangeIndex (0, 1, 2, …, n) 。
dtype:数据类型。
copy:拷贝数据,默认为 False。

创建

从列表创建
单个列表

[in]: data = [1, 2, 3, 4, 5]
[in]: df = pd.DataFrame(data)
[in]: print(df)
[out]:
   0
0  1
1  2
2  3
3  4
4  5

嵌套列表创建

import numpy as np
import pandas as pd

data = [["xiaoming",12],["xiaohong",12],["xiaolan",14]]
s = pd.DataFrame(data,index=list("123"),columns=["Name","Age"])
print(s)

out
       Name  Age
1  xiaoming   12
2  xiaohong   12
3   xiaolan   14

从 字典创建

[in]: data = {'Name': ['xiaoming', 'zhangsan', 'lisi'], 'Age':[10, 11, 21]}
[in]: df = pd.DataFrame(data)
[in]: print(df)
[out]:
       Name  Age
0  xiaoming   10
1  zhangsan   11
2      lisi   21

查询/统计计算 数据

首先构建 符合标准正态的 随机数据
以下是传入二维数组

[in]: df = pd.DataFrame(np.random.randn(6,4), columns=list('ABCD'))  # 正太分布随机数
[in]: print(df)
[out]:
          A         B         C         D
0 -0.865623  0.104258  1.270031 -0.497194
1  3.748685 -1.068945 -0.138821 -0.068492
2  0.331632  1.397363 -1.452206  0.280301
3 -0.370889  0.018017 -0.545934  1.278703
4 -0.568596  0.914634 -0.017826 -0.375882
5 -1.252650 -0.140955 -1.715116 -1.294911

也可以用字典的方式传入数据
在这里插入图片描述
以第一个正态分布的数据为例

查看首位数据

在这里插入图片描述

读取 指定 行列

import numpy as np
import pandas as pd

data = pd.DataFrame(np.random.randn(6,4),index=list("abcdef"),columns=list("ABCD"))
# 列 读取
print(data["A"]) #读取单列
print(data[["A","C"]]) #读取多列
# 行 读取
print(data[0:3]) #切片 读取 第0 1 2 行
print(data["a":"d"]) #索引 读取 a-d 行
print(data.loc["a"])# 查询单行
print(data.loc[["a","b"]]) # 查询多行
# 多行 多列 读取
print(data["a":"d"][["A","D"]]) # a-d行 A和D列 数据
print(data.loc[["a","b"],["A","B"]])
print(data.loc["a":"b","A":"B"])
print(data.loc[data.index[0:2],["A","B"]])

数据处理

排序
import numpy as np
import pandas as pd

data = [["xiaoming",16],["xiaohong",12],["xiaolan",14]]
s = pd.DataFrame(data,index=list("123"),columns=["Name","Age"])
# 按照数值排序 by:按照Age ascending:False 大到小排序
print(s.sort_values(by='Age',ascending=False))
print(s.sort_index(axis=1,ascending=True)) #索引 列从小到大排序
选择数据
import numpy as np
import pandas as pd

data = [["xiaoming",16,1234],["xiaohong",12,2345],["xiaolan",14,23452]]
s = pd.DataFrame(data,index=list("123"),columns=["Name","Age","number"])
print(s['Name']) #选择Name一列数据
print(s[0:2]) #选择第0-1行数据
print(s.iloc[0:2,1:3])#选择第0-1行 第1-2列的数据
print(s.iloc[[1,2],1:3]) #选择第二第三行 的第1-2列
print(s[s.Age>12]) #选择Age这一列中大于12的数据
修改、添加、转置 数据
import numpy as np
import pandas as pd

data = [["xiaoming",16,1234],["xiaohong",12,2345],["xiaolan",14,23452]]
s = pd.DataFrame(data,index=list("123"),columns=["Name","Age","number"])
print(s)
s.iloc[1,1]=15 #第二行第二列数据修改为15 需要数清楚第几行第几列
s.loc['2','Age']=18 #根据标签定位修改
s.Age[s.Age > 0] = 0 # 将Age列中 大于 0 的所有数据修改为 0
s["address"] = pd.Series(np.arange(3),index=list("123")) #新加一列数据
print(s.T) # 数据转置
快速综合统计结果:计数,均值,标准差,最大值,四分位数,最小值

在这里插入图片描述

合并

第一种:索引一样的前提下合并

res = pf.concat([df1,df2,df3],axis=0,ignore_index=True) #将数据竖向合并,并且更新索引值

第二种:索引不一样

res1 = pd.concat([df1,df2],join='outer',ignore_index=True)#相同索引值合并,不同索引值用NAN填充
res2 = pd.concat([df1,df2],join='inner',ignore_index=True)#删除不同索引值数据,合并相同索引值数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值