pandas 常用操作

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)
    	# append是否将列追加到现有索引。
    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重复值操作

  • 查看重复值的个数
    data.duplicated().sum()
    
  • 删除重复值,保存第一个值
    data.drop_duplicates(keep='first',inplace=True)
    data.drop_duplicates(subset=['col_name'], inplace=True)
    

4. pandas根据值排序

data.sort_values(by='date',inplace=True,ascending=False) 
  # inplace=True:将排序后的数据重新赋值给data
  # ascending=False,降序,默认升序
  # ignore_index=True重新排序

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)
    
  • 将某列的值切割并添加新列
    • 根据空格切割
      data['name_new']=data['name'].map(lambda x: x.split(' ')[0])
      
  • 数值区间划分
    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') #periods:生成时间个数,freq:时间间隔
    
  • 查看日期的星期,月份,天数,小时
    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获取数据
    # 注意:data的列索引是日期
    monthly = data.resample('M').first()#数据的重新取样
    df_yearly = data.resample('A').last()
    

7. pandas 均线值

  • 获取5日均线
       md5=df['close'].rolling(5).mean()
    

8. pandas 数据统计

  • 查看相关系数
      data.corr()
    
  • 绘制相关系数热力图
      data.corr().style.background_gradient(cmap='coolwarm').set_precision(2)
    
  • 查看列的众数
      data['总分'].mode()
    
  • 查看列的中位数
      data['总分'].median()
    

9. groupby分组

  • 重复数据按照某列合并
       data.groupby(data_repeat.columns.to_list()).agg(number=('people_number','sum')).reset_index()
    

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}') # &2列同时满足
    
  • 或操作
    data.query('`name_1`!="1" | `name_2`!="2"')
    

11. 条件查询行

  • 长度条件查询
    data[data['novel_path'].str.len()>15]
    
  • 包含内容条件查询
    data[data['path'].str.contains('home')]
    

12. 合并dataframe

data=pd.DataFrame(columns=['path','name']) # 创建空的DataFrame
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)# 创建一条数据的DataFrame
            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})
    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荼靡~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值