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

如果你已经:安装好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'])

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值