import pandas as pd
from pandas import Series, DataFrame
Series
1. 创建Series
直接将列表创建为Series
类型obj = pd.Series([4, 7, -5, 3])
,此时索引为默认0~n
将索引替换为自定义值 obj2 = pd.Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c'])
对字典直接转化Series
: sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
obj3 = pd.Series(sdata)
字典转化但是根据索引顺序对应传值 sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
,states = ['California', 'Ohio', 'Oregon', 'Texas']
提前根据索引定好顺序 obj4 = pd.Series(sdata, index=states)
2. 查看Series
obj.index
查看索引obj.index.name
索引列的名称obj.name
表的名称obj.value
查看值obj[1]
根据下标查看值obj['a']
根据索引查看值obj[2:4]
切片显示obj[ [1,3] ]
根据下标显示多个值obj[ [ 'a', 'b', 'c' ] ]
同时查多个值,用双[ [ ] ]obj[ 'a':'c' ]
索引切片显示多个obj[ obj < 2 ]
条件布尔显示多个值
3. 布尔运算判断
d 4
b 7
a -5
c 3
dtype: int64
print(obj2 > 0)
所有数判断True
或 False
obj2[obj2 > 0]
根据判断选出True
的行6 in obj2
错误表述: 判断索引是否在,不能直接判断值'e' in obj2
判断'e'
索引是否存在obj4.isnull()
判断哪些为空obj4.notnull()
判断非空
4. 算数运算
obj1 + obj2
索引相同的对应相加,不同的不相加赋值为NaN
,相对应但是有一方为NaN
则结果为NaN
obj2 * 2
全部乘2np.exp(obj2)
全部e的n次方
5. 修改
new_obj = obj.drop('c')
,删除多行:obj.drop(['b', 'c'])
drop()
的删除某行时临时的,需要一个变量存储结果重新根据 行序列 排序 obj2 = obj.reindex(['a', 'b', 'c', 'd', 'e'])
,可以新添加行序列,默认为空NaN 自动填充–复制上一个值 obj3.reindex(range(6), method='ffill')
根据索引大小排序 obj.sort_index()
按照值排序obj.sort_values()
默认空值排到末尾 计算出当前值所排的名次:obj.rank(method='first')
DataFrame
1. 创建
将等长的列表(非等长会报错)组成的字典转化为DataFrame
data = { 'state' : [ 'Ohio' , 'Ohio' , 'Ohio' , 'Nevada' , 'Nevada' , 'Nevada' ] ,
'year' : [ 2000 , 2001 , 2002 , 2001 , 2002 , 2003 ] ,
'pop' : [ 1.5 , 1.7 , 3.6 , 2.4 , 2.9 , 3.2 ] }
frame = pd. DataFrame( data)
columns
定长列表组成字典根据列索引顺序排序 转化为DataFrame pd.DataFrame(data, columns=['year', 'state', 'pop'])
index
设置 行索引 的名称,如果 列索引 对应数据找不到则为空 frame2 = pd.DataFrame(data, columns=['year', 'state', 'pop', 'debt'], index=['one', 'two', 'three', 'four','five', 'six'])
2. 查看显示
frame.head()
默认显示前5项
frame.columns
获取列索引
frame['state']
根据列索引查看,可以赋值修改
frame[ ['a', 'b'] ]
同时显示多列
frame[:2]
切片显示多行
frame[ frame['three'] > 5 ]
条件布尔查看
frame.loc[ 'three' ]
按 行索引值 查看
frame.loc['Colorado', ['two', 'three']]
先行后列
frame.iloc[ 2 ]
单行
frame.iloc[ [1,2], [3, 0, 1] ]
下标查看,先行后列
frame.state
根据列索引查看,但是修改值和删除不能用
frame.index.name
行向量名称,可以修改起别名
frame.columns.name
列向量名称,可以修改起别名
frame.values
查看整个表数据,以array格式显示,不会以表格形式表示
frame.index
显示行标签,index = frame.index, index[1:]
查看标签对象
'a' in frame.columns
判断列对象是否存在'a'
2003 in frame.index
判断某索引是否存在
3. 修改
frame['state'] = np.arange(6)
或range(6)
对某列按顺序依次赋值,需要长度完全一致frame['state'] = pd.Series([-1.2, -1.5, -1.7], index=['two', 'four', 'five'])
通过Series赋值,需要完全匹配行索引,且必须有行索引,长度可以不一致,空位设空del frame['state']
删除某列临时删除需要变量存储结果frame.drop('a')
删除单行, frame.drop(['a', 'b'])
删除多行 frame.drop('two', axis=1)
列删除,设置axis=1
或axis=columns
彻底删除跟del
一样frame.drop('c', inplace=True)
frame.T
转置根据索引大小排序:frame.sort_index()
默认按行索引排序,frame.sort_index(axis=1, ascending=False)
按列索引排序,降序 按照值排序:frame.sort_values(by='b')
指定列号进行 行排序 计算出当前值所排的名次:frame.rank(method='first', ascending=False, axis='columns')
默认为某列的行排序,axis='columns’则为某行的 列排序
3.1 reindex
修改,不对原数据造成修改,临时的显示需要赋值另一变量存储
重新根据 行序列 排序 obj2 = obj.reindex(['a', 'b', 'c', 'd', 'e'])
,可以新添加行序列,默认为空NaN 自动填充–复制上一个值 obj3.reindex(range(6), method='ffill')
通过columns
重新排列 列序列 states = ['Texas', 'Utah', 'California'], frame.reindex(columns=states)
df1.reindex(columns=df2.columns, fill_value=0)
将所有空值赋值为0
4. 运算
df1 + df2
扩散运算,全部对应相加df1.add(df2, fill_value=0)
在相加之前,将所以NaN赋值为0,然后再相加1/df1
== df1.rdiv(1)
对应相除arr - arr[0]
其中arr
为3*4,此时扩散每行都减去arr[0]
行arr.sub(arr[0], axis='index')
此时为对每列都减去arr[0]
函数运用np.abs(frame)
自定义函数应用f = lambda x: x.max() - x.min()
, frame.apply(f)
将frame
作为参数x
传入返回frame
```def f(x): return pd.Series([x.min(), x.max()], index=[‘min’, ‘max’])
frame.apply(f)` 返回的可以是一个列表而不仅仅是一个数