python每日学习13:pandas库的用法(2)
2025/2/24 12:03:56
来源:https://blog.csdn.net/mohanyelong/article/details/140694254
浏览:
次
关键词:python每日学习13:pandas库的用法(2)
python每日学习13:pandas库的用法(2)
-
建立索引:所有的数据框默认都已经使用从 0 开始的自然数索引,因此这里的"建立”索引指的是自定义索引
import pandas as pd
import numpy as np
df = pd.DataFrame( {'varl' : 1.0, ' var2' :[1,2,3,4], 'var3' : ['test', 'python','test','hello'] , 'var4' : 'cons'} , index =[0,1,2,3])
df = pd.read_csv ("filename",index_col="column”)
df = pd.read_csv ("filename", index_col=[0,1..])
-
指定某列为索引列
a_dict={'aa':3000,'bb':5000,'cc':6000}
b_dict={'aa':120,'bb':350,'cc':670}
df=pd.DataFrame([a_dict,b_dict])
df
df.set_index(keys='aa',append=True,drop=False)
-
将索引还原变量列
df.set_index(['aa','bb','cc'],drop=True,inplace=True)
df
df.reset_index ()
df.reset_index (drop=True)
-
引用和修改索引:注意:索引仍然是有存储格式的,注意区分数值型和字符型的引用方式引用索引(df.index)
df = pd.DataFrame({'name':['zs','ls','ww'],'level':['vip1','vip2','pm']})
df.index.name='sno'
df2 = pd.read_excel('stu_data.xlsx')
df3 = df2.set_index(keys = '学号')
df5 = df2.set_index(keys = ['学号','性别'])
df.index = ['a', 'b', 'c']
df
-
更新索引
-
reindex 则可以使用数据框中不存在的数值建立索引,并据此扩充新索引值对应的索引行列,同时进行缺失值填充操作
-
- labels :类数组结构的数值,将按此数值重建索引,非必需
- copy = True :建立新对象而不是直接更改原 df/series 缺失数据的处理方式
- method :针对已经排序过的索引,确定数据单元格无数据时的填充方法,非必需
- pad / ffill:用前面的有效数值填充
- backfill / bfill:用后面的有效数值填充
- nearest:使用最接近的数值逬行填充
- fill_value = np.NaN :将缺失值用什么数值替代
- limit = None :向前/向后填充时的最大步长
import pandas as pd
df=pd.DataFrame({'name':['11','22','33'],'level':['v1','v2','v3']})df.reindex([0,1,3])
df.reindex([0,1,3],method='ffill')
df.reindex([0,1,3],fill_value='test')
-
Series的索引和切片
-
索引
data=pd.Series([3,4,2,67,5],index=list('abcde'))
data['a']
data[2]
data[-1]
-
切片
data['a':'d']
data[2:4]
data[-3:-1]
data[data>3]
-
loc函数
data=pd.Series([5,3,2,5,9],index=[1,2,3,4,5])
data.loc[1]
data.iloc[0]
-
DataFrame的索引和切片
-
选择列
import pandas as pd
import numpy as np
df=pd.DataFrame({'name':['11','22','33'],'level':['v1','v2','v3'],'prices':[123,456,789]})
df['name']
df[['name','level']]
df.iloc[[0,2]]
-
按行列索引选择
data=pd.DataFrame(np.arange(12).reshape(3,4),index=list('abc'),columns=list('ABCD'))
data.loc['b']
data.iloc[1]
data.loc[:,'A']
data.iloc[:,0]
data.loc[['a','b','c'],['A','B']]
data.iloc[[0,1,2],[0,1]]
df[df['price']>10]
df[(df[“支出”]>10) & (df[“性别”]=='女')]
-
isin()选择
-
df.isin(values) 返回结果为相应的位置是否匹配给出的 values
values 为字典:对应各个变量名称
df.price.isin([123,789,89])
df[df.price.isin([123,789,89])]
df[df.price.isin(['v1','v2'])]
df[df.level.isin(['v1','v2'])]
-
排序
-
用索引排序
- df.sort_index(level ,ascending = True , inplace = False,na_position = 'last‘ ,first/last)
- level :(多重索引时)指定用于排序的级别顺序号/名称18
ascending = True :是否为升序排列,多列时以表形式提供
inplace = False :
na_position = 'last‘ :缺失值的排列顺序,
first/last
df=pd.DataFrame({'name':[11,22,3],'level':['v1','v2','v3'],'prices':[123,456,789]})
df.set_index(['prices','name'], inplace = True )
df.sort_index()
df.sort_index(ascending=[False])
df.sort_index(level='name')
df.sort_index(level=['name','prices'])
-
使用变量值排序
- df.sort_values(by,ascending = True,inplace = False ,na_position = 'last‘, first/last)
- by :指定用于排序的变量名,多列时以列表形式提供
ascending = True :是否为升序排列
inplace = False :
na_position = 'last‘ :缺失值的排列顺序,
first/last
df.sort_values(by='prices')
-
计算新变量
df.newvar=1
df['high']=1
-
基于原变量做简单四则运算
import math
df['high']=math.sqrt(16)
df['prices']=np.sqrt(df.high)
-
基于一个原变量做函数运算
- df.apply(,func,axis = 0 ,0 ’ index’,1’ columns ')
- func : 希望对行/列执行的函数表达式
axis = 0 :针对行还是列逬行计算
0 ’ index’:针对每列进行计算
1’ columns ':针对每行逬行计算
df['v2']=df.high.apply(math.sqrt)
df['v3']=df.high.apply(np.sqrt)
-
不修改原df,而是生成新的df
df1 = df.assign(v4=df['high'].apply(lambda x: 16))
-
在指定位置插入新变量列
- df.insert(,loc,column ,value,allow_duplicates = False,)
- loc :插入位置的索引值,0 <= loc <= len (columns)
column :插入的新列名称
value : Series 或者类数组结构的变量值
allow_duplicates = False :是否允许新列重名
df1.insert(1,'d1',100)
df1.insert(1,'d2',df.v2.apply(lambda x: 16))