1.pandas列属性操作
修改列名data= data. rename( columns= { 'Dest Country' : 'country' , 'Dest' : 'iata_code' , 'index' : 'from' } )
修改列索引名data. rename_axis( 'index' , inplace= True )
修改列属性数据类型 data[ 'country' ] = data[ 'country' ] . astype( 'int' )
重新设置列索引范围 data. index = np. arange( 1 , len ( data) + 1 )
重置列索引,重新排序 data= data. reset_index( drop= True )
去除不必要的列 data= data. drop( labels= [ 'cmte_id' , 'cand_id' , 'file_num' ] , axis= 1 )
将某列值设置为列索引people= pd. read_csv( './data/people.csv' , header= 0 )
people. set_index( 'people_id' , drop= True , append= False )
2. pandas填充值
data[ 'ID' ] = data[ 'ID' ] . fillna( method= 'ffill' )
data[ 'ID' ] = data[ 'ID' ] . fillna( method= 'bfill' )
3. pandas重复值操作
4. pandas根据值排序
data. sort_values( by= 'date' , inplace= True , ascending= False )
5. pandas列值操作
获取列不同值属性 data[ 'country' ] . unique( )
获取列不同值并转为列表list ( set ( data[ "Country/Region" ] . values. tolist( ) ) )
计算前后2值之差 data[ 'price' ] . diff( )
列值累加 data. cumsum( )
计算前后2值之差变化率 data[ 'price' ] . pct_change( )
查找列值是否存在列表中 dat. loc[ df[ 'country' ] . isin( [ '中国' , '美国' , '英国' , '日本' , '巴西' ] ) ]
查找列值是否存在某个字符 data. loc[ df[ 'country' ] . str . contains( '国' ) ]
获取列不同值属性个数 data[ 'country' ] . nunique( )
获取列各个元素出现的次数 data[ 'date' ] . value_counts( )
值移位
将列值向下移动一位 data[ 'shift' ] = data[ 'id' ] . shift( 1 , axis= 0 )
将行值向右移动一位 data= data. shift( 1 , axis= 1 )
查看每列最大值的索引data. iloc[ : , : ] . idxmax( )
将列值float类型,保留小数点后2位data[ 'a' ] = data[ 'mean' ] . round ( decimals= 2 )
将某列的值切割并添加新列
数值区间划分bins= [ i* 8 - 20 for i in range ( 11 ) ]
df, _= pd. cut( x= data[ '列名' ] , bins= bins, right= True , retbins= True )
查看每列的值是否有空值data. isnull( ) . any ( axis= 0 )
列值修改相关操作data[ 'name' ] = data[ 'name' ] . apply ( lambda x : 'd' if x not in lis else x)
data[ 'name' ] = data[ 'name' ] . apply ( lambda x : x. split( '-' ) [ 0 ] )
data[ 'name' ] = data[ 'name' ] . apply ( lambda x : x. replace( '_' , '-' ) )
6. pandas日期操作
字符串转为日期data[ 'date' ] = pd. to_datetime( data[ 'date' ] , "%Y%m%d" )
生成指定范围日期pd. date_range( '1/1/2021' , '9/11/2021' , freq= 'D' )
pd. date_range( '2015-07-03' , periods= 8 , freq= 'H' )
查看日期的星期,月份,天数,小时data[ 'week' ] = data[ 'date' ] . dayofweek
data[ 'month' ] = data[ 'date' ] . month
data[ 'day' ] = data[ 'date' ] . day
data[ 'hour' ] = data[ 'date' ] . dt. hour
将日期列转为天数格式data[ 'date' ] = ( data[ ‘date’] - np. datetime64( '1970-01-01' ) ) / np. timedelta64( 1 , 'D' )
resample获取数据
monthly = data. resample( 'M' ) . first( )
df_yearly = data. resample( 'A' ) . last( )
7. pandas 均线值
8. pandas 数据统计
9. groupby分组
10. query查询操作
查询status列值为0的行data_new. query( '`status`=="0"' )
查看值是在列表中的行data. query( '`status` in ["<",">"]' )
查看值是否在列表中lis= [ 1 , 2 , 3 , 4 , 5 ]
data. query( f'`name_1` in { lis} & `name_2` in { lis} ' )
或操作data. query( '`name_1`!="1" | `name_2`!="2"' )
11. 条件查询行
12. 合并dataframe
data= pd. DataFrame( columns= [ 'path' , 'name' ] )
for home, dirs, files in os. walk( root_path) :
for filename in files:
if filename. split( '.' ) [ - 1 ] . lower( ) == 'txt' :
dic= { 'path' : [ home] , 'name' : [ filename] }
df = pd. DataFrame( dic)
data= data. append( df)
13.行数据操作
删除行数据全为空
的行data= data. dropna( axis= 0 , how= 'all' )
删除行数据存在空
的行data= data. dropna( axis= 0 , how= 'any' )
14. dataframe创建
根据列表创建id_lis= [ 1 , 2 , 3 ]
name_lis= [ 'a' , 'b' , 'c' ]
data= pd. DataFrame( { 'id' : id_lis, "name" : name_lis} )