Pandas 常用的数据结构有两种:Series 和 DataFrame
首先介绍下Series:
Series 是一个带有 名称 和索引的一维数组,既然是数组,肯定要说到的就是数组中的元素类型,在 Series 中包含的数据类型可以是整数、浮点、字符串、Python对象等。
例如:data = ['a','b','c'] 输出结果为0 a
x = pd.Series(data) 1 b
2 c
dtype: object
若想修改index,只需要加上x.index = ['x','y','z']
若想为index这一列起名字,语句为x.index.name = '索引'
简单来说,一个 Series 包括了 data、index 以及 name。
# 构建索引
name = pd.Index(["Tom", "Bob", "Mary", "James"], name="name")
# 构建 Series
user_age = pd.Series(data=[18, 30, 25, 40], index=name, name="frist_test")
或者:
series1 = pd.Series([10, 20, 30, 40], index=list('abcd'))
还可以:
s=pd.Series({'a':3,'b':4,'c':5,'f':6,'e':8})
user = pd.Series(data=[18, 30, 25, 40], index=name, name="user", dtype=float)
运行结果为:
Bob 18.0
Joe 30.0
Will 25.0
Bob 40.0
Name: user, dtype: float64
如何从一个Series中取数据呢,这里和字典很相似,例如取x中的索引值,x.get('x')
Series 除了像 dict 外,也非常像 ndarray,这也就意味着可以采用切片操作。
例如x[:3]输出前三个,
结果为:
Bob 18.0
Joe 30.0
Will 25.0
Name: user, dtype: float64
下面介绍DataFrame:
DataFrame 是一个带有索引的二维数据结构,每列可以有自己的名字,并且可以有不同的数据类型。
存储数据:
可以构建一个 dict,key 是需要存储的信息,value 是信息列表。然后将 dict 传递给 data 参数。
index = pd.Index(data=["Tom", "Bob", "Mary", "James"], name="name")
data = {
"age": [18, 30, 25, 40],
"city": ["BeiJing", "ShangHai", "GuangZhou", "ShenZhen"]
}
user_info = pd.DataFrame(data=data, index=index)
也可以先构建一个二维数组,然后再生成一个列名称列表
data = [[18, "BeiJing"],
[30, "ShangHai"],
[25, "GuangZhou"],
[40, "ShenZhen"]]
columns = ["age", "city"]
user = pd.DataFrame(data=data, index=index, columns=columns)
age city
name
Tom 18 BeiJing
Bob 30 ShangHai
Mary 25 GuangZhou
James 40 ShenZhen
生成DataFrame后如何访问行?例如访问index=‘’Tom‘’的信息?
这就需要使用loc方法
user.loc["Tom"]
除了使用索引名字来确定位置,也可以通过第几行来确定,这时就需要使用iloc方法
user.iloc[0]
若访问多行,则可以通过切片操作轻易实现:user.iloc[1:3]
访问列只需要user["age"]即可
新增/删除列:
新增列只需要user.sex['man']就可以自动创建新的一列,且值均为man
也可以通过user["sex"]=['man','woman','man','woman']来设置不同的值
删除列则需要使用pop方法,x.pop('sex')
以上的方法都是基于原DataFrame来进行操作的,操作完后原来的DataFrame也会发生变化,若想保持原有的DataFrame保持不变就需要使用assign方法:
s = user.assign(sex = ['man','man','woman','man'])
本文有很多地方采用了下面这个博客:
https://blog.youkuaiyun.com/csdnsevenn/article/details/81351532