Series和DataFrame结构
DataFrame
DataFrame数据结构是一种二维的结构。整个DataFrame包括三个部分:
- 索引(index)
- 表头(column)
- 数值(data)
各列的数据类型可以不同。
Series
一维结构,带索引的一维数组,并且其中的数据类型一致。
DataFrame的任意一行或一列就是一个Series对象,比如我们通过.loc[0]
获取到第一个样本:
sampel = data.loc[0]
print (sample)
Series对象的表现形式为:索引在左,取值在右。
从DataFrame中得到的Series会自动分配两个属性:name
和dtype
。
对于输出(print)的Series对象,最后的Name:0
表示该样本为第一个样本,dtype:object
表示数据类型为object
。
可以通过.index
和.values
取出Series数据:
sample.index
sample.values
创建Series对象
最基本方式:
pd.Series(data,index=index)
其中data
可以为:
- 一个ndarray
- 一个Python字典
- 一个标量值
从ndarray创建
Pandas支持重复的索引值,index必须与data(ndarry)一样长。
pd.Series(ndarry,index=['a','a','b','c'])
或者省略index,index会默认为整数0到n-1,n为数据长度。
pd.Series(ndarry)
从字典创建
Python字典中的键:值
与Series中的索引:值
对应。所以可以直接转换:
d={'a':0.12, 'b':0.33, 'c':-0.17}
pd.Series(d)
从标量创建
即用单个数值直接创建:
pd.Series(2,index=['a','b','c'])
Series对象的相关操作
数据索引与筛选
s=pd.Series(np.random.randn(4),index=['a','a','c','d'])
s[0]
#取第一个值
s[:2]
#取第1-3个值
s[[1,3]]
#取第1,3个值
s[s<s.mean()]
s['a']
s[['c','d']]
'c' in s
#输出:True
算术运算
s+3
#s的全部数值+3
np.abs(s)
#绝对值
在算术运算中,会自动通过index对齐数据,然后分别对index相同的数据计算。
唯一值与个数统计
unique()
:返回Series去重后的数组。
values_counts()
:查看每一个元素(data)的频数。
astype()
:类型转换。如:
s1=s0.astype('float32')
Pandas包含的数据类型:
类型 | 说明 |
---|---|
object | 字符串或混合类型 |
int | 整型 |
float | 浮点型 |
datetime | 时间类型 |
bool | 布尔型 |
创建DataFrame对象
pd.DataFrame(data,index=index,columns=cloumns)
data允许为:
- 包含列表、字典或Series的字典
- 二维numpy.ndarray
- 一个Series
- 另一个DataFrame
从字典创建
d = {'one' : pd.Series([1., 2., 3.], index=['a', 'b', 'c']),
'two' : pd.Series([1., 2., 4.], index=['a', 'b', 'd'])}
df = pd.DataFrame(d)
从Series创建
s=pd.Series([1,2,3],index=['a','b','c'])
pd.DataFrame(s,columns=['first'])
DataFrame对象的相关操作
数据筛选
df[df['one'] > 1]
删除和添加一列
df['three'] = df['one'] + df['two']
df['flag'] = df['one'] > 1
#
df.insert(1, 'bar', df['one'])
#在位置1插入与one包含相同数据的一列bar
del df['flag']
#
bar = df.pop('bar')
#删除并将删除的值赋给bar
修改列名
d = {'one':'first'}
df.rename(columns=d)
#将one改为first
DataFrame的显示
DataFrame的显示可以调用pd.set_option()
实现。
参数 | 含义 |
---|---|
display.max_columns | 如果列数超过该值,则使用截断浏览模式,中间的部分样本用省略号略过,默认值为20 |
display.max_rows | 如果行数超过该值,则使用截断浏览模式,中间的部分样本用省略号略过,默认值为60 |
df = pd.read_csv('loandata.csv')
pd.set_option('display.max_columns', 5)
pd.set_option('display.max_rows', 4)
#最大行数为4行,最大列数为5列情况下的截断显示
索引
索引方法:
操作 | 语法 | 结果 |
---|---|---|
选取某一列 | df[col] | Series |
通过标签选取某一行/列 | df.loc[label] | Series |
通过位置(整数表示)获取某一行/列 | df.iloc[loc] | Series |
通过切片方式获取多行/列 | df[5:10] | DataFrame |
通过布尔向量获取多行/列 | df[bool_vec] | DataFrame |
常用:
df.iloc[0]
#通过索引,得到一行的Series
df.loc['1','name']
#通过具体值
网友评论