Pandas_2:Pandas中DataFrame类

本文详细介绍了Pandas库中的DataFrame数据结构,包括如何创建DataFrame、设置和修改数据、索引操作以及数据选取。通过实例展示了DataFrame的灵活性和强大功能,如字典创建、列的增加和删除、数据赋值等,同时也提到了索引对象的特性及其操作方法。
摘要由CSDN通过智能技术生成
import pandas as pd

pd.DataFrame( )

  • 表示矩阵数据表,是已排序的列的集合
  • 每一列的值的类型可以不同

使用字典创建DataFrame

data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
        'year': [2000, 2001, 2002, 2001, 2002, 2003],
        'popu': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]
       }
会自动为Series分配索引
frame = pd.DataFrame(data)
frame
stateyearpopu
0Ohio20001.5
1Ohio20011.7
2Ohio20023.6
3Nevada20012.4
4Nevada20022.9
5Nevada20033.2

head()会只展示前5行

frame.head()
stateyearpopu
0Ohio20001.5
1Ohio20011.7
2Ohio20023.6
3Nevada20012.4
4Nevada20022.9
在创建的时候,可以指定列的顺序
pd.DataFrame(data, columns = ['year', 'state', 'popu']).head()
yearstatepopu
02000Ohio1.5
12001Ohio1.7
22002Ohio3.6
32001Nevada2.4
42002Nevada2.9
  • 到这里可以指定,index是指行的名字,及索引, 而columns列名,后续会表示属性的名称
  • 传入的columns不在字典里,会以缺失值出现
  • 可见,当columns多出来一列,就会补充Na,但多出一行index就不可以,按照真实数据来说,多出一个样本很奇怪但多出一个属性则是一般操作
frame2 = pd.DataFrame(data, columns = ['year', 'state', 'popu', 'debt'], index = ['one', 'two', 'three', 'four', 'five', 'six'])
frame2.columns
Index(['year', 'state', 'popu', 'debt'], dtype='object')
DataFrame的属性,可以按照字典那样索引,也可以按照属性.操作
frame2['state']
one        Ohio
two        Ohio
three      Ohio
four     Nevada
five     Nevada
six      Nevada
Name: state, dtype: object
frame2.year
one      2000
two      2001
three    2002
four     2001
five     2002
six      2003
Name: year, dtype: int64
如果想取一行,使用.loc
frame2
yearstatepopudebt
one2000Ohio1.5NaN
two2001Ohio1.7NaN
three2002Ohio3.6NaN
four2001Nevada2.4NaN
five2002Nevada2.9NaN
six2003Nevada3.2NaN

可以修改行,可以看到这个会自适应类型

frame2.loc['three'] = 1
frame2
yearstatepopudebt
one2000Ohio1.5NaN
two2001Ohio1.7NaN
three111.01
four2001Nevada2.4NaN
five2002Nevada2.9NaN
six2003Nevada3.2NaN
frame2.loc['three'] = [2002, 'Ohio', 3.6, 'NaN']
frame2
yearstatepopudebt
one2000Ohio1.5NaN
two2001Ohio1.7NaN
three2002Ohio3.6NaN
four2001Nevada2.4NaN
five2002Nevada2.9NaN
six2003Nevada3.2NaN

也可以修改列

frame2.debt = 16.5
frame2
yearstatepopudebt
one2000Ohio1.516.5
two2001Ohio1.716.5
three2002Ohio3.616.5
four2001Nevada2.416.5
five2002Nevada2.916.5
six2003Nevada3.216.5
当把数组赋给一列的时候,需要长度一样
import numpy as np
frame2['debt'] = np.arange(6.)
frame2
yearstatepopudebt
one2000Ohio1.50.0
two2001Ohio1.71.0
three2002Ohio3.62.0
four2001Nevada2.43.0
five2002Nevada2.94.0
six2003Nevada3.25.0
也可以把Series对象DataFrame的一列,Series的索引会按照DataFrame的索引重新排列
val = pd.Series([-1.2, -1.5, -1.7], index = ['two', 'four', 'five'])
frame2.debt = val
frame2
yearstatepopudebt
one2000Ohio1.5NaN
two2001Ohio1.7-1.2
three2002Ohio3.6NaN
four2001Nevada2.4-1.5
five2002Nevada2.9-1.7
six2003Nevada3.2NaN

若被赋值的列不存在,就会生成一个新的列,可以像字典那样使用del删除列

对于创建,.操作.eastern = 不能创建新的列

对于删除,也不可以使用.操作

frame2['eastern'] = frame2.state == 'Ohio'
frame2
yearstatepopudebteastern
one2000Ohio1.5NaNTrue
two2001Ohio1.7-1.2True
three2002Ohio3.6NaNTrue
four2001Nevada2.4-1.5False
five2002Nevada2.9-1.7False
six2003Nevada3.2NaNFalse
del frame2['eastern']
print(frame2.columns)
print(frame2.index)
Index(['year', 'state', 'popu', 'debt'], dtype='object')
Index(['one', 'two', 'three', 'four', 'five', 'six'], dtype='object')

注意:从DataFrame选取的Series列是视图,即改变了,就真的变了,想拷贝需要.copy()来显示的拷贝

使用字典套字典的方法创建DataFrame

pop = {'Nevada':{2001:2.4, 2002:2.9},
       'Ohio':{2000:1.5, 2001:1.7, 2002:3.6}}
pop
{'Nevada': {2001: 2.4, 2002: 2.9}, 'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.6}}
frame3 = pd.DataFrame(pop)
frame3
NevadaOhio
20012.41.7
20022.93.6
2000NaN1.5
使用numpy里的转置来操作DataFrame
frame3.T
200120022000
Nevada2.42.9NaN
Ohio1.73.61.5
自适应dataframe对索引
pd.DataFrame(pop, index = [2001, 2002, 2003])
NevadaOhio
20012.41.7
20022.93.6
2003NaNNaN
包含Series的字典也可以用来制作Dataframe
pdata = {'Ohio':frame3['Ohio'][:-1], 'Nevada':frame3['Nevada'][:-1]}
pdata
{'Ohio': 2001    1.7
 2002    3.6
 Name: Ohio, dtype: float64,
 'Nevada': 2001    2.4
 2002    2.9
 Name: Nevada, dtype: float64}
pd.DataFrame(pdata)
OhioNevada
20011.72.4
20023.62.9
若索引和列有name属性,那么也会显示
frame3.index.name = 'year'
frame3.columns.name = 'state'
frame3
stateNevadaOhio
year
20012.41.7
20022.93.6
2000NaN1.5
frame3.values
array([[2.4, 1.7],
       [2.9, 3.6],
       [nan, 1.5]])

索引对象——pd.Index( )

  • 索引对象不可变,不能frame2.index[1] = ??
labels = pd.Index(np.arange(3))
labels
Int64Index([0, 1, 2], dtype='int64')
obj2 = pd.Series([1.5, -2.5, 0], index = labels)
obj2
0    1.5
1   -2.5
2    0.0
dtype: float64
'php' in frame3.columns
False
2001 in frame3.index
True
Pandas的索引可以包括重复值
  • 根据重复的索引进而选取的值,可以一次性选取全部该索引下的值
labels1 = pd.Index(['dawn', 'dawn', 'lby'])
labels1
Index(['dawn', 'dawn', 'lby'], dtype='object')

一些索引对象的常用方法

方法描述
append将额外索引对象粘贴到原索引,产生一个新索引
difference计算两个索引差集
intersection计算两个索引交集
union计算两个索引并集
isin某个索引是否在另一个索引中
delete将位置i的元素删除,并产生新索引
drop根据传参,删除指定索引值
insert在位置i插入元素
is_monotonic若索引序列递增,就返回True
is_unique若索引序列唯一,就返回True
unique计算索引的唯一值序列,去重
# append
labels = labels.append(labels1)
labels
Index([0, 1, 2, 'dawn', 'dawn', 'lby'], dtype='object')
# isin
labels1.isin(labels1)
array([ True,  True,  True])
# delete
labels = labels.delete(3)
labels
Index([0, 1, 2, 'dawn', 'lby'], dtype='object')
labels = labels.append(pd.Index(['22', '33']))
labels
Index([0, 1, 2, 'dawn', 'lby', '22', '33'], dtype='object')
# drop
labels = labels.drop('22')
labels
Index([0, 1, 2, 'dawn', 'lby', '33'], dtype='object')
labels.is_monotonic_increasing
False
labels.is_monotonic_decreasing
False
labels.is_unique
True
labels.unique()
Index([0, 1, 2, 'lby', '33'], dtype='object')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值