Pandas

一、常规操作

1.1 只保留数字
df5['n'] = df5['n'].str.extract('(\d+)', expand=False)
读入文件

1.pandas读.txt文件
使用read_csv就行

2.pandas不读入头部索

data = pd.read_table("brandname.txt",header=None)
计算person系数
data.corr()
一列中的某几类值
sample_list=[2233,1122,1133,1223]
sample_prod_df = all_prod_df[all_prod_df['product_id'].isin(sample_list)]
sample_prod_df

删除

删除控制
df.dropna()
dataframe转list
res.values.flatten().tolist()
agg
 data.groupby(['a','b','c']).agg(order_count = pd.NamedAgg(column='a', aggfunc='count').reset_index()
保留两位小数
res['a']=res['mean'].round(decimals=2)
res['b']=res['mean'].map(lambda x:("%.2f")%x)
res['c']=res['mean'].map(lambda x:format(x,".2%"))
print(res)
print(res.dtypes)
修改类型
data_output["name"] = data_output["name"].astype('str')
指定行索引删除
# 删除第一行
df.drop(df.index[0], inplace=True)
删除某一列
data.drop(data.columns[0],axis=1, inplace=True)
del df['columns'] #改变原始数据
df.drop('columns',axis=1)#删除不改表原始数据,可以通过重新赋值的方式赋值该数据
df.drop('columns',axis=1,inplace='True') #改变原始数据

将两列转为字典:

bc_ec.set_index("buscat1")["expat"].to_dict()
修改列名
data_ec = data_ec.rename(columns={'main_sku_id':"标题ID","brand_code":"品牌ID"})
修改
pd.qcut

import numpy as np
from numpy import *
import pandas as pd
df = pd.DataFrame()
df['data'] = [1,2,2,2,2,6,7,8,9,0]#这里注意箱边界值需要唯一,不然qcut时程序会报错
df['cut']=pd.cut(df['data'],5)
df['qcut']=pd.qcut(df['data'],5)

https://blog.csdn.net/qq_37089628/article/details/86501234

分桶后,再确保值落入到每一个区间当中。
qcut 是等频切割,即基本保证每个组里的元素个数是相等的。
cut是按值切割,即根据数据值的大小范围等分成n组,落入这个范围的分别进入到该组。

重置索引
res_a.reset_index(inplace=True)
res_a.reset_index(inplace=True,drop=True) #一般采用这个,不然会新增加一列

df.reset_index(drop=True) 1 这样就会将标签重新从零开始顺序排序。这里可以使用参数设置drop=True删除旧的索引序

explode

https://blog.csdn.net/Andew_lee/article/details/108785964

assign

这个函数的返回值是一个新的DataFrame数据框,包含所有现有列和新生成的列

https://blog.csdn.net/fengdu78/article/details/120465745

多条件并列查询
data_new[(data_new["name"]=="A") & (data_new["B"]==5.0)]
将数据转化为日期类型
pd.to_datetime(data['date'])
生成时间序列
pd.date_range(start='2021-07-01', end='2022-07-20',freq='30D')

https://www.cnblogs.com/chentianyu/p/16086765.html

文件输出

1.输出忽略索引

data_new.to_csv(‘data_new.csv’,index=None)
按照某一列进行排序

https://blog.csdn.net/weixin_33739523/article/details/86133896

data.sort_values("xxx",inplace=True)
ascending 为bool值

多列排序

df.sort_values(by=['4-语文','5-数学'])
选择性赋值

在这里插入图片描述

选择某一些列
base_data.loc[base_data["category"].isin(req_cat)] #req_cat是list类型
#给某一列具有B值属性的值赋值
read_ab_data["label"].loc[read_ab_data["label"]=="B"]="BB"
判断某一列中知否有对应字符串
import pandas as pd
series = pd.Series(['abc', 'bcd'])
print(series.str.contains('a'))
统计sku_id的数量
.groupby("sku_id").sku_id.count().shape[0]
缺失值处理

使用DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)

value: scalar, dict, Series, or DataFrame
dict 可以指定每一行或列用什么值填充
method: {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}, default None
在列上操作
ffill / pad: 使用前一个值来填充缺失值
backfill / bfill :使用后一个值来填充缺失值
limit 填充的缺失值个数限制。应该不怎么用

求差集

在这里插入图片描述

在这里插入图片描述

percentiles=[.1]

.1表示只取中位数和10%分位数。

transform

对sku_id 做groupby后,求均值

np.log(train_data.groupby("id").price.transform("max"))
一列划分为多列
#拆消费时间
consum["日期"]=consum["消费时间"].map(lambda x:x.split(' ')[0])
consum["时间"]=consum["消费时间"].map(lambda x:x.split(' ')[1])
consum[['时间','日期']]
列中存储数组类型

将列中存储的list转为numpy

np.array(data["res"].tolist())
MultiIndex

多索引数据获取

data.index.get_level_values(0)
数据去重
 x["col"].drop_duplicates()
 drop_duplicates(subset=[‘comment’], keep=‘first’, inplace=True)
 data.drop_duplicates() #按照行去重
交集差集
pd.merge(data,statis_sku,on=["id"],how="inner")
输出文件乱码

使用df.to_csv(“test.csv”,encoding=“utf-8”)输出的文件中会出现中文乱码,正确方法是df.to_csv(“test.csv”,encoding=“utf_8_sig”)

修改某一列的函数值

https://blog.csdn.net/qq_19309473/article/details/121006040

merge

合并对齐列,
inner是merge函数的默认参数,意思是将dataframe_1和dataframe_2两表中主键一致的行保留下来,然后合并列。

https://blog.csdn.net/stevenkwong/article/details/52540605?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.base&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.base

二、数据拼接

JOIN

join默认按照列进行索引

left=pd.DataFrame(['0','0','0','0','0',"0"], index=[3,3,4,5,6,7],columns=['销量'])
right=pd.DataFrame([13000,15000,9000,8600,10000], index=[3,4,5,6,7],columns=['销量2'])

在这里插入图片描述

字典值映射
# 订单表 sku 追加地区
data = data.assign(
    area_name=lambda x: x.columns.apply(lambda dicts.get(x)))

类型转化

字典转为pandas

pd.DataFrame(dicts.items())

数据转移操作

等级为groupy的列,日期为转置后的列名,value为具体对应的值

datae.pivot(index='等级', columns='日期', values='单量')

相关操作

查看数据占用多少内存

## 查看df占内存的大小
import timeit
import sys
 
st = time.time()
print('all_data占据内存约: {:.2f} GB'.format(df.memory_usage().sum()/ (1024**3)))
st1=time.time()
print('costtime: {:.2f} s'.format(st1-st))
print('all_data占据内存约: {:.2f} GB'.format(sys.getsizeof(df)/(1024**3)))

报错信息

编码信息报错
'utf-8' codec can't decode byte 0xa3 in position 79780: invalid start byte

解决
加入:encoding=‘unicode_escape’ /e ncoding=‘gb18030’

import pandas as pd, numpy as np
from datetime import datetime, date
from matplotlib import pyplot as plt
import seaborn as sns
df = pd.read_csv('./OnlineRetail.csv',encoding='unicode_escape')
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值