from pandas import Series,DataFrame
s=Series([1,2,3,4],index=['a','b','c','d']) #指定索引,显式索引
#索引,获取单个值
s['b']
s.b
s.get('b')
s[1]
s=Series([3,4,5,6],index=['a','a','b','b']) #索引可以重复,但是尽量不要这样做
s
切片不会改变序列数据类型
数据(序列、数组、字典、标量)、索引、名字
s1=Series(5,index=['a','b','c','d']) #标量,自动重复以匹配索引长度
s1
s1=Series(np.arange(1,5),index=['a','b','c','d']) #数组
s1
dict1={'a':1,'b':3,'c':5,'d':8}
s1=Series(dict1) #不指定索引,默认以字典的key作为索引,字典值作为值
s1
ser2.name #名字
ser2.values #数据
ser2.index #索引
ser2.dtype #series的数据类型
data1=[[1, 2, 3],[4, 5, 6],[7, 8, 9]] #二维列表创建,二维元组
d1=DataFrame(data1) #默认行索引和列索引
d1
d1.index=['a','b','c'] #创建dataframe后添加行索引和列索引
d1.columns=['one','two','three']
d1
data1=[[1, 2, 3],[4, 5, 6],[7, 8, 9]] #二维列表创建,二维元组
d1=DataFrame(data1,index=['a','b','c'],columns=['one','two','three'])#创建的时候加上行索引和列索引
d1
df2=DataFrame(np.arange(16).reshape(4,4)) #数组转换为dataframe
df2
data1={'a':[1,2,3],'b':[4,5,6]} #把key抽出形成columns
DataFrame(data1)
dist_dict={'shanghai':{2015:10,2016:11,2018:12},'beijing':{2015:102,2016:103,2017:109}}
DataFrame(dist_dict) #外层的key形成columns,里层的key成为index
data = [{'a': 1, 'b': 2,'d':3}, {'a': 10, 'b': 20, 'c': 30}]
DataFrame(data)
data2 = [Series([1, 2],index=['a','b']),Series([1,2],index=['a','c'])]
DataFrame(data2)
二维列表、二维数组、矩阵、dataframe之间互相转换
二维列表 | 二维数组 | 矩阵 | dataframe | |
---|---|---|---|---|
二维列表 L | - | np.array(L) | np.mat(L) | pd.DataFrame(L) |
二维数组 a | a.tolist() | - | np.mat(a) | pd.DataFrame(a) |
矩阵 m | m.tolist() | np.array(m) | - | pd.DataFrame(m) |
dataframe | df.values.tolist() | df.values | np.mat(df.values) | - |
filepath_or_buffer: 文件,
sep=',', 数据分隔符
delimiter=None, 同上
header='infer', 表头/列名 ,默认,用数据的第一行作为列名. None就是不用数据列名
names=None, 列名
index_col=None, 用哪一列作为行索引
csv文件轻量化的文件格式,非常小,读写的时候速度都比较快
data1=[[1, 2, 3],[4, 5, 6],[7, 8, 9]] #二维列表创建,二维元组
d1=DataFrame(data1,index=['a','b','c'],columns=['one','two','three']) #创建的时候加上行索引和列索引
d1
#写
d1.to_csv('d1.csv',sep=',', header=True) #写入csv,带header,sep指定分割符,一般使用','
#读
pd.read_csv('d1.csv',index_col=0) #将第0列设置为索引
-----------------------------------------------------------------------
#写
d1.to_csv('d2.csv',sep=',', header=False) #写入csv,不带header
#读
pd.read_csv('d2.csv',index_col=0,names=['one','two','three']) #names参数增加列名(在读的时候列名用names)
#写到excel中的某个表格
d1.to_excel('d1.xlsx',sheet_name='d1_sheet')
#读取excel中的某个表格
pd.read_excel('d1.xlsx',sheet_name='d1_sheet',index_col=0)
#写到多个表格,上下文管理语句
with pd.ExcelWriter('output.xlsx') as writer:
d1.to_excel(writer, sheet_name='d1')
d2.to_excel(writer, sheet_name='iris')
df1=pd.read_html('http://www网址')
pd.read_clipboard() #从粘贴板读取数据
df.sample(frac=0.2, replace=True, weights=df1.列名, random_state=0) #抽取20%的数据;可放回;权重(有多少条数据就应该有多少个数进行对应);随机数种子
查看数据框的形状,得到一个元组,元组中的值表示数据框的行数和列数
详细信息,包括数据类型以及缺失值
注意字符串字段类型Dtype 显示 object而不是str
因为存储的地址(有固定位宽),而不是数据本身;
str类型的值长度并不固定,不知道应该赋予多少位宽,所以显示的类型是object
df[:1] #选择第一行,默认的索引选择行
df['列名'] #选出的是序列
df.列名 #选出的是序列
df[['列名']] #选择一列,dataframe
df[['列名1','列名2']] #选择多列
用的是数据框中能看到的行索引和列索引,左闭右闭
df.loc[ 行标签信息,列标签信息 ]#行列标签注意带有引号
#如果只对列有要求,行信息不可以省略,用冒号表示全部都要
用的是数据在表中的位置索引,左闭右开
df.iloc[行位置信息,列位置信息]
df1.iloc[1:3,0:2] #两部分参数,对行的需求和对列的需求
df1.iloc[1:3]#如果只对行有要求,列信息可以省略
df1.iloc[:,[2,4]] #如果只对列有要求,行信息不可以省略,用冒号表示全部都要
参数:
index:修改行索引
columns:修改列索引
也可以支持函数,或者是字典映射
df.loc['index名'] = 数据 #数据长度要一致
df['列名'] = 数据
df.insert(序号,'列名',数据)
#删除 要不是index 就是columns
df.drop('index名',axis=0) #删除行,默认情况,axis=0,新生成操作
df.drop('列名',axis=1) #删除列
drop #删除列/行
df.drop(index=[1,2]) #删除行
df.drop(columns=["列名"]) #删除列
del df['列名'] #直接在原数据中删除该列
df.pop("列名") #弹出删除列
df.drop(‘index名’,axis=0) #删除行,默认情况,axis=0,新生成操作
df.drop(‘列名’,axis=1) #删除列
df.drop(index=[1,2]) #删除行
df.drop(columns=[“列名”]) #删除列
del df[‘列名’] #直接在原数据中删除该列
#dataframe的运算,索引自动对齐,行索引对齐,列索引对齐,不足的部分引入缺失值
df1 = DataFrame([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]],
index=['a','c','b'],columns=['one','two','three'])
df2 = DataFrame(np.arange(0,16).reshape(4,4),
index=['a','b','c','d'],columns=['one','two','three','four'])
df1+df2 #直接相加
df1.add(df2,fill_value=0) #调用方法,对有缺失的数据进行填充,填充完再进行相加
apply:针对行和列操作,可以对dataframe,可以对序列
map:对序列中的单个元素进行操作
applymap:对dataframe中的单个元素进行操作