1 Pandas中的数据对象
Series和 DataFrame是 Pandas中最常用的两个对象。
- Series 对象
Series是Pandas中最基本的对象,它定义了 NumPy的 ndarray对象的接口_ array_(),因此 可以用NumPy的数组处理函数直接对Series对象进行处理。Series对象除了支持使用位置作为 下标存取元素之外,还可以使用索引标签作为下标存取元素,这个功能与字典类似。每个Series 对象实际上都由两个数组组成:
index: 它是从ndarray数组继承的Index索引对象,保存标签信息。若创建Series对象时不指定index, 将自动创建一个表示位置下标的索引。
values: 保存元素值的ndarry数组,NumPy的函数都对此数组进行处理。
import pandas as pd
s=pd.Series([1,2,3,4,5],index=['a','b','c','d','e'])
print('索引',s.index)
print('值',s.values)
索引 Index(['a', 'b', 'c', 'd', 'e'], dtype='object')
值 [1 2 3 4 5]
Series对象的下标运算同时支持位置和标签两种形式:
print('位置下标s[2]:',s[2])
print('标签下标s["d"]:',s['d'])
Series对象还支持位置切片和标签切片。位置切片遵循Python的切片规则,包括起始位置, 但不包括结束位置;但标签切片则同时包括起始标签和结束标签。
print(s[1:3])
print(s['b':'d'])
b 2
c 3
dtype: int64
b 2
c 3
d 4
dtype: int64
和 ndarray数组一样,还可以使用位置列表或位置数组存取元素,冋样也可以使用标签列表和标签数组。
print(s[[1, 3, 2]])
print(s[['b', 'd', 'c']])
b 2
d 4
c 3
dtype: int64
b 2
d 4
c 3
dtype: int64
Series对象同时具有数组和字典的功能 ,因此它也支持字典的一些方法 ,例如 Series.iteritems():
list(s.iteritems())
当两个Series对象进行操作符运算时,Pandas会按照标签对齐元素,也就是说运算操作符会对标签相同的两个元素进行计算。在下面的例子中,s 中标签为b的元素和s2 中标签为b的 元素相加得到结果中的22。当某一方的标签不存在时,默认以NaN(Not a Number)填充。由于 NaN是浮点数中的一个特殊值,因此输出的Series对象的元素类型被转换为float64。
s2 = pd.Series([20,30,40,50,60], index=['b','c','d','e','f'] )
print(s+s2)
- DataFrame 对象
DataFrame的各个组成元素
![33ccb116b91fd4f47b847d4bb2ff5822.png](https://i-blog.csdnimg.cn/blog_migrate/d6151120e51ee0f8e71cea23e26573f2.jpeg)
df_soil = pd.read_csv("data/Soils-simple.csv " , index_col=[0,1],parse_dates=["Date"])
df soil.columns.name = "Measures"
parse_dates=["Date"])
dtypes 属性可以获得表示各个列类型的Series对象
print(df_ soil.dtypes)
与数组类似,通过shape属性可以得到DataFrame的行数和列数:
print(df_soil.shape)
DataFmme对象拥有行索引和列索引, 可以通过索引标签对其中的数据进行存取。index属性保存行索引,而columns属性保存列索引。在木例中列索引是一个Index对象,索引对象的名 称可以通过其name厲性存取:
print(df_soil.columns)
print(df_soil.columns.name)
行索引是一个表示多级索引的Multiindex对象,每级的索引名可以通过names属性存取:
print(df_soil.index)
print(df_soil.index.names)
与二维数组相同,DataFrame对象也有两个轴,它的第0 轴为纵轴,第 1轴为横轴。当某个方法或函数有axis、orient等参数时,该参数可以使用整数0 和 1或者index和columns来表 示纵轴方向和横轴方向。
[]运算符可以通过列索引标签获取指定的列,当下标是单个标签时,所得到的是Series对象, 例如df_soill["pH'],而当下标是列表时,则得到一个新的DataFmme对象,例如df_soil[["Densn","Ca]]:
print(df_soil["pH"])
print(df_soil[["Dens","Ca"]])
- 将内存中的数据转换为DataFrame对象
调用DataFrame()可以将多种格式的数据转换成DataFrame对象,它的三个参数data、 index 和 columns分别为数据、行索引和列索引。
data参数可以是: 二维数组或者能转换为二维数组的嵌套列表。 字典 :字典中的每对“键-值”将成为DataFrame对象的列。值可以是一维数组、列表或 Series对象。
df1=pd.DataFrame(np.random.randint(0,10,(4,2)),index=['A','B','C','D'],columns=['a','b'])
df2=pd.DataFrame({'a':[1,2,3,4],'b':[5,6,7,8]},index=['A','B','C','D'])
- 常用函数参数
![c0a13b3b7ad48fed7eb8e3193709a60b.png](https://i-blog.csdnimg.cn/blog_migrate/4f8c99a60792294fab9303351df85df3.jpeg)
2 下标存取
Series和DataFrame提供了丰富的下标存取方法,除了直接使用[]运算符之外,还可以使 用.loc[]、.iloc[]、.at[]、.i