pandas基本操作

一、基本操作

从CSV中创建 DataFrame
dlist = pd.read_csv('test.csv', dtype = {'vc': str}, names=['sn','rg'], usecols = [0,1,2,3], encoding="ANSI", error_bad_lines=False)
dlist = pd.read_excel('test.xlsx', sheet_name='Sheet1')

获取所有excel的sheet名称
df = pd.read_excel('test.xlsx', sheet_name=None)
df.keys()

写入excel多个sheet
with pd.ExcelWriter('gzb.xlsx') as writer:
    df1.to_excel(writer,sheet_name="df1",index=None)
    df2.to_excel(writer,sheet_name="df2",index=None)

显示DataFrame的基础信息
dlist.info()

取消列与行显示限制
pd.set_option('display.max_rows',None)
pd.set_option('display.max_columns',None)

展示dlist的前3行
dlist.head(3)

取出dlist的cname和cage列
dlist[['cname', 'cage']]
dlist.loc[:, ['cname', 'cage']]

取出dlist索引为13的行
dlist.loc[[1,3]]

取出3, 4, 8行的cname和cage列
dlist.loc[[3, 4, 8], ['cname', 'cage']]

取出3~8行的cname~city列
dlist.loc[3:8, 'cname': 'cage']

按time列删除重复值,保留第一个
dlist = dlist.drop_duplicates(subset='time', keep='first', inplace=False)

二、条件查询

取出cage值缺失的行
condition = dlist['cage'].isnull()
dlist[condition]

取出cage在2,4间的行
condition = (dlist['cage']>12) & (dlist['cage']<14)
dlist[condition]

取出cage在2,4间的行,且city为SH的行
condition = (dlist["cage"] > 20) & (dlist["city"] == 'SH')
dlist.loc[condition,["cage","city"]]

取出非空的行
condition2 = (data[vf].notnull()) & (data[vt].notnull())
t_list = data[condition2]

取出有重复的行
condition = dlist.duplicated(subset=['sn'],keep=False)  #选择重复
pick_list = dlist[~condition]    #不重复列

三、分组

计算cage的总和
dlist['cage'].sum()

计算每个city的cage的总和
dlist.groupby('city')['cage'].sum()

计算dlist中每个city的人数
dlist.groupby('city').count()

计算每个city大于20的数量
condition = dlist['cage']>20
dlist[condition].groupby('city').count()

数据透视表
result = pd.pivot_table(df,index=['vcity','quxian'],columns=['vdate'],aggfunc={'rg':sum,'sn':len})

数据列联表
ctb = pd.crosstab(df['玩游戏'], df['看视频'])

四、排序

先按cage降序排列,并选取cname、cage列
dlist[["cname","cage"]].sort_values("cage",ascending=False)

五、添加数据

在dlist中添加新成员Tom,和cage、city等信息
dlist.loc[len(dlist)] = ['Tom', 16, 'SH']

六、更新数据

yee的cage改为1.5
dlist.loc['yee', 'cage'] = 1.5

cage列转换为int类型
dlist['cage'] = dlist['cage'].astype(int)

cage大于20的全部加5
condition = dlist['cage'] > 20
dlist.loc[condition,'cage'] = dlist.loc[condition,'cage'] + 5

将city列中的SH、BJ替换为上海、北京
dlist['city'] = dlist['city'].replace(['SH','BJ'],['上海','北京'])

更改列名
toplist.columns = ['TG','CG']

更新序列
duplicated_list = duplicated_list.reset_index(drop=True)

七、模糊查找

cname里包含on的行
condition = dlist.loc[:,"cname"].str.contains('on')
dlist[condition]

cname里以ro为开头的行
condition = dlist.loc[:,"cname"].str.startswith('ro')
dlist[condition]

cname里以am为结尾的行
condition = dlist.loc[:,"cname"].str.endswith('am')
dlist[condition]

正则表达式查找
condition = dlist.loc[:,"cname"].str.contains('i[stuv]', regex = True)
dlist[condition]

正则表达式提取
cname列,只保留a-m字母
dlist['cname'] = dlist['cname'].str.extract('([a-m]*)', expand=False)

八、删除数据

删除cname为yee的行
condition = dlist["cname"] == "yee"
dlist = dlist.drop(dlist[condition].index)

删除列
plist = df.drop(['用户账号','整体感知'],axis=1)

九、多表

查找当前表在另一个表中存在的city,并返回cname和city
condition = dlist["city"].isin(tlist["city"])
dlist.loc[condition, ["cname","city"]]

按 dlist 和 tlist 都有的城市合并两份表格
pd.merge(left=dlist, right=tlist, on="city")

按 dlist 和 tlist 都有的城市合并两份表格,两份表列名不同
pd.merge(left=dlist, right=tlist, how="left", left_on="city", right_on="chengshi")

挑选dlist的所有城市和tlist的所有城市,合并一起
pd.concat([dlist["city"],tlist["city"]]).drop_duplicates()

分列
dispatch_date_list = df['dispatch_date'].str.split('.',expand = True)

十、时间

转换为时间
alist['加粉时间'] = pd.to_datetime(alist['加粉时间'])

转换为时差
nlist['时差'] = pd.to_timedelta(nlist['时差'])

时间间隔13小时
dt = datetime.timedelta(days = 1,hours=3)

提取日期中的月份
minuend = t_row['派单时间']
minuend.month

转化为秒
def lb(xrow):
    return round(timedelta.total_seconds(xrow['时差']),2)
nlist['时差']=nlist.apply(lb,axis=1)

设置日期
date_begin = pd.Timestamp('2022-10-01 00:00:00')

strptime与strftime
def shiftime(stime):
    struct_time = dt.datetime.strptime(str(stime), "%Y%m%d")
    td = dt.timedelta(days = 1)
    struct_time = struct_time + td
    return struct_time.strftime("%Y%m%d")

十一、缺失值处理

若某行有空值,删除该行
df = df.dropna(axis=0, how='any', inplace='True')

填充缺失值
df.fillna('n')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值