Pandas的DataFrame
1. 手工创建DataFrame
a = [[1, 2, 2],[3,None,6],[3, 7, None],[5,None,7]]
data = DataFrame(a)
2. Excel数据数据没有顶头的处理
import os
import pandas as pd
base_path = "D:\\practicespace\\Python\\datasets"
file_name = "data.xlsx"
path = os.path.join(base_path, file_name)
print(path)
if(os.path.exists(path)):
print("file exists") data = pd.read_excel(path, sheet_name="Sheet4", header=2, usecols="C:J")
data.head()
3. 字段值统计
data.Region.value_counts()
output:
EOC 36675
SOC 28468
WOC 20460
NOC 16017
Name: Region, dtype: int64
4.字段包含特殊符号(比如空格)的索引方式
不能再采用".字段名“的方式,而是要采用字符索引方式:
print("region count: ", len(data.Region.value_counts()))
print("Sub Region count: ", len(data["Sub Region"].value_counts()))
或者去掉特殊,然后再进行字段直接索引
df = df.rename(columns=lambda x: x.replace("'","").replace('"','')).replace(" ","")
5. 缺失值处理
1)统计缺失值
total = data.isnull().sum().sort_values(ascending=True)
percent = (data.isnull().sum()/data.isnull().count()).sort_values(ascending=True)
table = pd.concat([total, percent], axis=1, keys=["total", "percent"])
2)删除缺失值的行列
# 使用dropna方法删除含有缺失值的行,默认是行
print(data.dropna())
# 删除含有缺失值的列
print(data.dropna(axis=1))
3)填充缺失值
from pandas import DataFrame
a = [[1, 2, 2],[3,None,6],[3, 7, None],[5,None,7]]
data = DataFrame(a)
print(data)
# 统一填充缺失值为指定值
print(data.fillna(0))
# index=1(从0开始)列缺失值填充为1,index=2的列的缺失值填充为2
print(data.fillna({1:1,2:2}))
# 使用平均值进行填充
print(data.fillna(data.mean()))
# 前向填充,使用默认是上一行的值,设置axis=1可以使用列进行填充,不存在或者上一行也是None的时候就不填充
print(data.fillna(method="ffill"))
print()
# 后向填充,使用下一行的值,不存在或者下一行也是None的时候就不填充
print(data.fillna(method="bfill"))
6.遍历数据运算
# 最原始,效率最低的迭代方案
def myfunction(df):
res_list = []
for i in range(0,len(df)):
res_list.append(df.iloc[i]['first']/df.iloc[i][‘second'])
return disftance_list
# 通过iterrows做遍历
def haversine_looping(df):
disftance_list = []
for index,row in df.iterrows():
disftance_list.append(row[‘high']/row[‘open'])
return disftance_list
# Cython做了全局优化,效率比iterrow有所提高,这里注意axis必须要设置
df.apply(lambda row: row[‘high']/row[‘open'], axis =1)
# pandas的矢量化处理,比较快,做了底层实现优化
dftest4['rate'] = dftest4['high']/dftest4['open']
# 通过values将pandas的serias数据转化为numpy arrays,效率最高,因为numpy在底层做了C的预编译
dftest5['rate'] = dftest5['high'].values/dftest5['open'].values
7. 列内容重置
df1['total'] = df1.Jan + df1.Feb + df1.Mar
df1['category'] = np.where(df1['total'] > 200000, 'A', 'B')
这里注意,如果是total已经存在,可以通过df1.total的索引方式,但是如果是新创建的列,只能通过["columnName"]的方式进行索引。
8. 删除列
del DF['column-name']
DF= DF.drop('column_name', 1);
DF.drop('column_name',axis=1, inplace=True)
DF.drop([DF.columns[[0,1, 3]]], axis=1,inplace=True) # Note: zero indexed
9. group
在pandas里面的group,分组和运算是分开的,对于聚合则是在group之后通过调用sum,mean之类的函数基于分组做运算;
# 单分组
groupall = data.groupby("Region")
groupall = groupall.sum()
groupall
# 多分组
groupall = data.groupby(["Region", "Sub Region"])
groupall = groupall.sum()
groupall
10. reindex vs. reset_index
reindex是进行列重排,需要指定要保留那些列(也可以指定新列),
df = pd.DataFrame(np.arange(9).reshape(3,3), index=[2,3,1], columns=['a','b','c'])
df
df1=df.reindex(columns=['a','b'])
df1
df返回为:
a b c
2 0 1 2
3 3 4 5
1 6 7 8
df1返回为(看到c列已经消失了):
a b
2 0 1
3 3 4
1 6 7
df2返回为:
a b e
2 0 1 NaN
3 3 4 NaN
1 6 7 NaN
reset_index则是重新创建一个索引列,一般group之后索引列就消失了,所以需要通过reset_index重新插入一列索引,默认不改变数据,只是插入一列索引列,可以通过指定drop参数来对原索引列进行删除(group之类的聚合操作已经没有原索引列信息了)。
>>> df = pd.DataFrame(np.arange(9).reshape(3,3), index=[2,3,1], columns=['a','b','c'])
>>> df
>>> df2 =df.reset_index()
>>> df2
>>> df3 = df.reset_index(drop=True) #删除原索引列
>>> df3
>> 输出的df为:
a b c
2 0 1 2
3 3 4 5
1 6 7 8
>> 输出的df2为:
index a b c
0 2 0 1 2
1 3 3 4 5
2 1 6 7 8
>> 输出的df3为:
a b c
0 0 1 2
1 3 4 5
2 6 7 8
参考:
https://www.jianshu.com/p/e664b9a3bf70
https://blog.csdn.net/katyusha1/article/details/81501893
缺失值处理
https://blog.csdn.net/sinat_29957455/article/details/79017363
迭代处理
https://blog.csdn.net/m0_37382341/article/details/83716988
Pandas的DataFrame的更多相关文章
- python 数据处理学习pandas之DataFrame
请原谅没有一次写完,本文是自己学习过程中的记录,完善pandas的学习知识,对于现有网上资料的缺少和利用python进行数据分析这本书部分知识的过时,只好以记录的形势来写这篇文章.最如果后续工作定下来 ...
- Pandas之Dataframe叠加,排序,统计,重新设置索引
Pandas之Dataframe索引,排序,统计,重新设置索引 一:叠加 import pandas as pd a_list = [df1,df2,df3] add_data = pd.concat ...
- pandas中DataFrame对象to_csv()方法中的encoding参数
当使用pd.read_csv()方法读取csv格式文件的时候,常常会因为csv文件中带有中文字符而产生字符编码错误,造成读取文件错误,在这个时候,我们可以尝试将pd.read_csv()函数的enco ...
- pandas(DataFrame)
DataFrame是二维数据结构,即数据以行和列的表格方式排列!特点:潜在的列是不同的类型,大小可变,标记行和列,可以对列和行执行算数运算. 其中Name,Age即为对应的Columns,序号0,1, ...
- Python3 Pandas的DataFrame数据的增、删、改、查
Python3 Pandas的DataFrame数据的增.删.改.查 一.DataFrame数据准备 增.删.改.查的方法有很多很多种,这里只展示出常用的几种. 参数inplace默认为False,只 ...
- Python3 Pandas的DataFrame格式数据写入excle文件、json、html、剪贴板、数据库
Python3 Pandas的DataFrame格式数据写入excle文件.json.html.剪贴板.数据库 一.DataFrame格式数据 Pandas是Python下一个开源数据分析的库,它提供 ...
- python. pandas(series,dataframe,index) method test
python. pandas(series,dataframe,index,reindex,csv file read and write) method test import pandas as ...
- pandas取dataframe特定行/列
1. 按列取.按索引/行取.按特定行列取 import numpy as np from pandas import DataFrame import pandas as pd df=DataFram ...
- Pandas中DataFrame修改列名
Pandas中DataFrame修改列名:使用 rename df = pd.read_csv('I:/Papers/consumer/codeandpaper/TmallData/result01- ...
- Spark与Pandas中DataFrame对比
Pandas Spark 工作方式 单机single machine tool,没有并行机制parallelism不支持Hadoop,处理大量数据有瓶颈 分布式并行计算框架,内建并行机制paral ...
随机推荐
- FTPClient中使用completePendingCommand方法注意事项
方法介绍: * There are a few FTPClient methods that do not complete the * entire sequence of FTP commands ...
- reset.css文件下载及剖析
@charset "utf-8"; /* http://meyerweb.com/eric/tools/css/reset/ v2.0-modified | 20110126 Li ...
- java abstractQueue
- 原生js的常用方法总结
=============== 通知: 博主已迁至<掘金>码字,博客园可能以后不再更新,掘金地址:https://juejin.im/post/5a1a6a6551882534af25a8 ...
- shell脚本中大于,大于等于,小于,小于等于、不等于的表示方法
症状:shell中大于,大于等于,小于等于,lt,gt ,ne,ge,le 很对应. 应对方法: 大于 -gt (greater than) 小于 -lt (less than) 大于或等于 -ge ...
- 欢迎访问阿里云Go Module代理仓库服务
简介 go module公共代理仓库,代理并缓存go模块.你可以利用该代理来避免DNS污染导致的模块拉取缓慢或失败的问题,加速你的构建. 地址 https://mirrors.aliyun.com/g ...
- Javascript总结(全)
说明 个人感觉总结得很好忍不住要分享,转载自github地址,作者博客原文发现打不开,于是复制粘贴到此处,如有侵权,请联系本人删除. Type class TypeFn { isString (o) ...
- 第09组 Alpha冲刺(6/6)
队名:观光队 组长博客 作业博客 组员实践情况 王耀鑫 过去两天完成了哪些任务 文字/口头描述 博客撰写,文档,答辩材料整理. 展示GitHub当日代码/文档签入记录 接下来的计划 QA. 还剩下哪些 ...
- python 类的倒入
test.pyclass sss: def ddd(self): print("hello") test2.pyfrom testone import sss
- shell 命令行参数(getopt和getopts)
getopt 命令 使用getopt命令,可以解析任何命令行选项和参数,但是用法比较复杂.getopt的命令用法如下: $ getopt --help 用法: getopt optstring par ...