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
  df2=df.reindex(columns=['a','b','e'])
  df2

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的更多相关文章

  1. python 数据处理学习pandas之DataFrame

    请原谅没有一次写完,本文是自己学习过程中的记录,完善pandas的学习知识,对于现有网上资料的缺少和利用python进行数据分析这本书部分知识的过时,只好以记录的形势来写这篇文章.最如果后续工作定下来 ...

  2. Pandas之Dataframe叠加,排序,统计,重新设置索引

    Pandas之Dataframe索引,排序,统计,重新设置索引 一:叠加 import pandas as pd a_list = [df1,df2,df3] add_data = pd.concat ...

  3. pandas中DataFrame对象to_csv()方法中的encoding参数

    当使用pd.read_csv()方法读取csv格式文件的时候,常常会因为csv文件中带有中文字符而产生字符编码错误,造成读取文件错误,在这个时候,我们可以尝试将pd.read_csv()函数的enco ...

  4. pandas(DataFrame)

    DataFrame是二维数据结构,即数据以行和列的表格方式排列!特点:潜在的列是不同的类型,大小可变,标记行和列,可以对列和行执行算数运算. 其中Name,Age即为对应的Columns,序号0,1, ...

  5. Python3 Pandas的DataFrame数据的增、删、改、查

    Python3 Pandas的DataFrame数据的增.删.改.查 一.DataFrame数据准备 增.删.改.查的方法有很多很多种,这里只展示出常用的几种. 参数inplace默认为False,只 ...

  6. Python3 Pandas的DataFrame格式数据写入excle文件、json、html、剪贴板、数据库

    Python3 Pandas的DataFrame格式数据写入excle文件.json.html.剪贴板.数据库 一.DataFrame格式数据 Pandas是Python下一个开源数据分析的库,它提供 ...

  7. python. pandas(series,dataframe,index) method test

    python. pandas(series,dataframe,index,reindex,csv file read and write) method test import pandas as ...

  8. pandas取dataframe特定行/列

    1. 按列取.按索引/行取.按特定行列取 import numpy as np from pandas import DataFrame import pandas as pd df=DataFram ...

  9. Pandas中DataFrame修改列名

    Pandas中DataFrame修改列名:使用 rename df = pd.read_csv('I:/Papers/consumer/codeandpaper/TmallData/result01- ...

  10. Spark与Pandas中DataFrame对比

      Pandas Spark 工作方式 单机single machine tool,没有并行机制parallelism不支持Hadoop,处理大量数据有瓶颈 分布式并行计算框架,内建并行机制paral ...

随机推荐

  1. CentOS7.0 内核(3.10.0-123.el7.x86_64)bug导致KVM物理机重启

    一.问题描述 服务器硬件:DELL R720 系统版本:CentOS7.0 内核版本:3.10.0-123.el7.x86_64 故障现象:偶尔会重启 二.问题原因 经查看dmesg日志发现是kern ...

  2. 蓝桥杯如何训练?(附VIP题库)

    https://www.dotcpp.com/ 给大家介绍下蓝桥杯,是近几年可以说国内名气最大的程序设计类比赛了 相比国际赛事ACM,蓝桥杯入门简单.中文答题.拿奖率高,更适合国内大众化参加,近几年不 ...

  3. JMeter【第一篇】jmeter5.1在windows(含插件安装)及linux环境下安装

    jmeter下载 前提:已经安装jdk8+ jmeter下载地址:http://jmeter.apache.org/download_jmeter.cgi 有Binaries和Source版本 前者是 ...

  4. 加深对 JavaScript This 的理解

    我相信你已经看过很多关于 JavaScript 的 this 的谈论了,既然你点进来了,不妨继续看下去,看是否能帮你加深对 this 的理解. 最近在看 <You Dont Know JS> ...

  5. OpenCV 学习笔记(0)两幅图像标定配准

    参考教程 依赖opencv扩展库,使用sifi匹配 保存配准信息 "./config/calibratedPara.yaml" #include <iostream> ...

  6. [Schematics] 2. EJS

    Schematices using EJS as template language. template: <%# This will not appear in the generated o ...

  7. Docker网络配置、Docker部署分布式项目

    目标 1.Docker网络配置 2.Docker部署SpringCloud项目 Docker网络配置 Docker网络模式介绍 Docker在创建容器时有四种网络模式:bridge/host/cont ...

  8. Java中的long类型和Long类型比较大小

    Java中我们经常要做一些判断,而对于判断的话,用的最多的便是“>”.“==”.“<”的比较,这里我们进行一个Long类型数据和long类型数据的比较大小的讲解. Java中Long和lo ...

  9. Zabbix实战-简易教程--中间件RabbitMQ监控

    一.环境 zabbix版本:3.0 二.脚本说明 .├── rabbitmq.template.xml   模板文件├── scripts  │   └── rabbitmq│   ├── api.p ...

  10. cloneable以及深拷贝和浅拷贝

    Objec类有11个方法,有两个protected的方法,其中一个为clone方法(另一个为finalize). 该方法的签名是: protected native Object clone() th ...