如果你已经:安装好python

有一点python语言基础

而且没有过系统化的python学习

希望掌握常见的dataframe处理方法

这篇文章将帮助你掌握工作中常用的工作表操作。

文章阅读时间约40min。

1. 导入package:pandas

import pandas as pd

2. 数据读取与保存读取文件

temp = pd.read_excel("file_path",sheet_name= "sheet_name" ) # sheet_name可以缺省

temp_1 = pd.read_csv("file_path",encoding='utf-8') #file_path不可以出现中文;也可以用来读取txt文件;encoding可以缺省

temp_2 = pd.read_csv("file_path",encoding='gbk') #输出文件

# 输出单个文件

temp.to_excel('file_path',index=False) # 通过设置index参数确定是否保留dataframe中的index

temp_1.to_csv('file_path',index=False,encoding='utf-8')输出多个文件到同一个excel中

writer = pd.ExcelWriter('file_path') # 生成一个新的文件

temp_2.to_excel(writer,sheet_name='temp_2') # 保存第一个表格 temp_2

temp_3.to_excel(writer,sheet_name='temp_3') # 保存第二个表格 temp_3

writer.save()创建新的dataframe

# 使用list创建df

df = pd.DataFrame([[np.nan, 2, np.nan, 0],

[3, 4, np.nan, 1],

[np.nan, np.nan, np.nan, 5],

[np.nan, 3, np.nan, 4]],

columns=list('ABCD'))

#通过字典创建df

test_dict = {'A':[np.nan,3,np.nan,np.nan],

'B':[2,4,np.nan,3],

'C':[np.nan,np.nan,np.nan,np.nan],

'D':[0,1,5,4]}

df = pd.DataFrame(test_dict)

3. 数据初步描述

# 查看前几行与后几行

temp.head()

temp.tail()

# 查看df行列数

temp.shape

temp.shape[1] # 单独查看列数

# 查看df各变量描述性统计

temp.describe()

temp.info()

# 查看df列名

temp.columns

4. 数据行列操作

4.1 修改列名

### 修改全部列名

temp.columns = ["col_name1","col_name2",...] #需与temp表列数相同

### 修改部分列名

temp_1 = temp.copy()

temp_1.rename(columns={'Province':'省份'},inplace=True)

### 将表格列名放入list中

cols = temp_1.columns.tolist()

4.2 增减行列增加一列

temp['test'] = 1

#通过原有列简单计算

temp['test2'] = temp['Value'] + temp['test']

#基于原有列增加列

temp['test3'] = temp['Value'].apply(lambda x: '>100' if x>100 else '<=100')

temp[(temp['col_name']> 0) &(temp['col_name']== 0) ,'new_col_name'] = 1基于原有多列增加列

def cal_label(province,value):

if (province in ['北京','上海','广东']) & (value>1000):

return 'High'

elif (province in ['西藏','新疆','海南']) & (value<100):

return 'Low'

else:

return 'Medium'

temp['test4'] = temp.apply(lambda x: cal_label(x['Province'],x['Value']),axis=1)删除行列

temp.drop("row_name",axis=0).head()

temp.drop("col_name",axis=1).head()

del temp["period"]

4.3 行列切片与数据选择简单行切片

## 选取第2-4行

temp[2:5]

## iloc用法:通过行数筛选,eg:选择第4行

temp.iloc[3]

## 选择行index为"2020-01"的行

temp.loc["2020-01"]根据条件做行筛选

1.逻辑判断符号:

- "|" 代表 "or";

- "&" 代表 "and";

- "==" 代表 "等于";

- "~" 代表 "非"

Note:

1. 每个条件之间需要放括号;

2. 不要使用"="作为逻辑判断

## 筛选出col_name列<=3的所有行

temp[temp["col_name1"]<=3]

list(temp["col_name2"][temp["col_name1"]<=3])列切片

temp[['col_name1','col_name2']]

temp.iloc[:,1:3]

## 选择连续行、连续列

temp.iloc[2:5,1:3]

## 选择非连续行、非连续列

temp.iloc[[1,2,4],[1,3]]

## 用冒号表示所有行/所有列

temp.iloc[1:3,:]

temp.iloc[:,1:3]

## 选择某个值

temp.iloc[0,0]

## 条件筛选

temp[temp['Province']=='上海']

temp[temp['Province'].isin(['上海','北京'])] # isin是用list筛选

temp[~(temp['Province'].isin(['上海','北京']))]

5. dataframe相关用法索引:index

temp = temp.reset_index()

temp = temp.set_index(["col_name"])排序:sort

temp = temp.sort_values(by=['Province','Period']).head()

temp = temp.sort_values(by=['Value'],ascending=False).head()去重:drop_duplicates

temp["col_name1"].unique()

## 按某列值去重

temp.drop_duplicates(subset=['Province']).head() #可以添加keep = first类似的参数

## 去重同时保留最大值

temp = temp.sort_values(by=['Province','Value'])

temp.drop_duplicates(subset=['Province'],keep='last').head()空值:dropna/fillna

df.isnull().sum()

#删除缺失值记录

df.dropna(subset=['A','B'], how='all')

#填补缺失值

df.fillna(0)用指定值填充/替换

values ={'col_name1':0,'col_name2':1,'col_name3':2}

df.fillna(value=values)

temp['col_name'].replace('a','A',inplace=True)

temp.head()宽表转长表,长表转宽表

## 长转宽:

temp_pivot = pd.pivot_table(temp, values='Value', # 列变行之后的值

index=['Period'], # 保留的列值

columns=['Province'], # 列变行之后,列名

aggfunc=np.sum).reset_index()

### 长转宽之后转换行名为单一维度

temp_pivot.columns = ["".join((j)) for i,j in temp_pivot.columns]

## 宽转长:

tepm_melt = pd.melt(temp_pivot,

id_vars=['Period'],# 保留的列值

value_vars=['上海', '云南', '内蒙古', '北京', '吉林',

'四川', '天津', '宁夏', '安徽', '山东', '山西', '广东', '广西', '新疆', '江苏', '江西', '河北',

'河南', '浙江', '海南', '湖北', '湖南', '甘肃', '福建', '西藏', '贵州', '辽宁', '重庆', '陕西',

'青海', '黑龙江'],# 转换为列值

var_name='Province',# 列名

value_name='value')

6. 值统计

6.1 统计值

temp.loc["max"] = temp.max(axis=0)

## 针对离散型变量对每个值计数

temp['Province'].value_counts()

## 统计每个值占比

temp['Province'].value_counts(normalize=True)

## 非重复值计数

temp['Province'].nunique()

## 对数值型变量进行基本的描述性统计

temp['Value'].describe()

6.2 数据计算group by

temp_groupby = temp.groupby(['Period','Province'])['Value'].sum().reset_index().sort_values(by=['Period'])

data1['排名'] = data1.groupby(['月份','小区'])['响应率'].rank(ascending=0, method='min')分组排名

temp = temp.groupby(['Period'])['Value'].sum().reset_index().sort_values(by=['Period','Value'])

temp['rank'] = temp['Value'].groupby(temp['Period']).rank(ascending=1,method='dense')

temp.tail(10)

7. 数据合并merge,根据某列匹配两个表格

df1.merge(df2, on = ["key"], how='right')

# 当左右表格键名不一致时使用

df3.merge(df4, left_on='lkey',right_on='rkey')concat

# 需要保证列名/行数相同

## 行连接|列对齐

pd.concat([data1,data2,data3],keys=['data1','data2','data3'])

## 列连接|行对齐

pd.concat([data1,data2,data3],axis =1,keys =['data1','data2','data3'])

python数据表_第1关:了解python数据表操作相关推荐

  1. 数据科学家数据分析师_站出来! 分析人员,数据科学家和其他所有人的领导和沟通技巧...

    数据科学家数据分析师 这一切如何发生? (How did this All Happen?) As I reflect on my life over the past few years, even ...

  2. java动态是如何根据实体建表_传入Java对象 自动创建动态表 并录入数据

    看到Hibernate你给一个对象,他就能动态的创建配置文件里面指定的表名,然后把数据录入到数据库,当初感觉是很神奇,不过,好像 Hibernate不能动态的分表创建表和录入数据 我这里写了一个公用的 ...

  3. mysql二亿大表_面对有2亿条数据的mysql表

    看到这个2亿5千条数据的表,我的内心是拒绝的,各种条件筛选要取出相应的数据,被折磨了两天,现在记录下心路历程 先分享下mysql相关的知识点1 名词解释 主键(PRIMARY KEY): 唯一索引,不 ...

  4. python 神经网络图像增强_非常好用的Python图像数据增强工具,适用多个框架

    编辑:zero 关注 搜罗最好玩的计算机视觉论文和应用,AI算法与图像处理 微信公众号,获得第一手计算机视觉相关信息 本文转载自:公众号:AI公园 作者:mdbloice 编译:ronghuaiyan ...

  5. python大数据平台_基于腾讯位置大数据平台的全球移动定位数据Python爬取与清洗...

    前不久投稿了一篇论文是以腾讯位置大数据为基础进行人口空间化研究的,但是还未见刊,见刊后会给大家分享下具体的研究方法. 首先打开腾讯位置大数据星云图链接:https://xingyun.map.qq.c ...

  6. mysql附录建表_用CREATE TABLE 语句创建数据表

    用CREATE TABLE 语句创建数据表 用 CREATE TABLE 语句创建表.此语句的完整语法是相当复杂的,因为存在那么多的可选子句,但在实际中此语句的应用相当简单.如我们在第 1 章中使用的 ...

  7. python数据校验_最近抽空造了一个数据校验的轮子 Python -validator

    最近抽空造了一个数据校验的轮子 python-validator. 在开发 web 应用时,经常需要校验前端传入的数据.如果使用 Django,那么可以使用自带的 forms 进行数据校验. pyth ...

  8. print python excel分隔_合并/拆分 Excel?Python、VBA轻松自动化

    作者 | Ryoko 来源 | 凹凸数据 当你收集了 n 个人的 EXCEL 记录表,需要将它们汇成一个总表时你会怎么做呢? 如果不通过技术手段,要一个个打开再复制粘贴也太麻烦了吧! 此时就需要一个通 ...

  9. python 查找算法_七大查找算法(Python)

    查找算法 -- 简介 查找(Searching)就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素. 查找表(Search Table):由同一类型的数据元素构成的集合 关键字(Ke ...

最新文章

  1. MySQL导入.sql文件及常用命令
  2. 美国能源部宣布SunShot2020目标完成超90%
  3. jQuery单选按钮监听事件
  4. Win32 汇编子过程总结
  5. 在Vista操作系统中通过manifest文件使VC应用程序获得管理员权限
  6. excel可编码java,Java关于前后台传输中文乱码以及Excel下载乱码解决
  7. 【ArcGIS遇上Python】Python实现点转栅格(PointToRaster)
  8. greenplum配置高可用_0665-6.2.0-如何在CDH中配置HMS高可用
  9. 对象间相互调用时互相控制的几种方法
  10. vscode中配置cmake及debug使用
  11. 麦咖啡MACfEE服务器安全防护设置技巧!
  12. pyTecplot 学习使用
  13. 修改服务器线路,介绍几种常见的网络服务器线路
  14. php系统主题,第8章 drupal主题系统
  15. echo和narcissus寓意_希腊神话故事(一)Echo 和 Narcissus
  16. uva 12304(圆的相关函数模板)
  17. 第三章 迭代器(iterators)概念与traits编程技法
  18. 如何评价2021年的B站跨年晚会
  19. 分析全基因组上的蛋白信息
  20. 【机器学习】基于mnist数据集的手写数字识别

热门文章

  1. SAP 电商云 Spartacus UI 页面的 page guard 是从什么地方解析的
  2. 通过 SAP UI5 的 TypeScript 开发环境,来学习什么是 DefinitelyTyped
  3. SAP Commerce Cloud 启动和重启脚本
  4. 一种简单地实现 SAP UI5 Master detail 页面的方法
  5. rxjs里b = a.pipe(map(mapFn))的执行示意图
  6. SAP UI5库文件的加载细节探讨
  7. SAP Hybris Commerce,CRM和C4C的登录语言选择
  8. 如何为SAP WebIDE开发扩展(Extension),并部署到SAP云平台上
  9. how is sales pipeline retrieved from backend
  10. Important table for SEGW