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. win10和linux引导问题(没有系统选择界面)

    由于最近学习嵌入式和c模块化编程,需要使用Linux系统,但是编程之外,WIN10还是主力系统,决定装双系统. 往常一样,百度装双系统方法,网上千篇一律,大都一个套路. 首先,WIN10 下,新开一个 ...

  2. 2019年牛客多校第二场 F题Partition problem 爆搜

    题目链接 传送门 题意 总共有\(2n\)个人,任意两个人之间会有一个竞争值\(w_{ij}\),现在要你将其平分成两堆,使得\(\sum\limits_{i=1,i\in\mathbb{A}}^{n ...

  3. adb命令篇

    前言    Android的adb提供了很多命令,功能很强大,可以为开发和调试带来很大的便利.当然本文并不是介绍各种命令的文章,而是用于记录在平时工作中需要经常使用的命令,方便平时工作时使用,所以以后 ...

  4. ORM概述(对象关系映射)

    ORM概述: ORM(Object-Relational Mapping)表示对象关系映射.在面向对象的软件开发中,通过ORM,就可以把对象映射到关系型数据库中.只要有一套程序能够做到加你对象与数据库 ...

  5. 项目Beta冲刺--7/7

    项目Beta冲刺--7/7 作业要求 这个作业属于哪个课程 软件工程1916-W(福州大学) 这个作业要求在哪里 项目Beta冲刺 团队名称 基于云的胜利冲锋队 项目名称 云评:高校学生成绩综合评估及 ...

  6. 学习:费马小定理 & 欧拉定理

    费马小定理 描述 若\(p\)为素数,\(a\in Z\),则有\(a^p\equiv a\pmod p\).如果\(p\nmid a\),则有\(a^{p-1}\equiv 1\pmod p\). ...

  7. windows下的批处理bat文件和Linux下的shell文件的互相转换

    shell(Linux.Solaris) bat(windows) 含义 # rem 注释行 /[directory]/[directory]/.../[directory]/ [disk]:\[di ...

  8. del_deploy.core.prefs.bat

    cd /d "D:\Workspaces\MyEclipse 10" del ".metadata\.plugins\org.eclipse.core.runtime\. ...

  9. Spring核心模块解析

    Spring框架是一个轻量级的集成式开发框架,可以和任何一种框架集成在一起使用,可以说是一个大的全家桶.Spring从1.x发展到现在的5.x可以说是越来越强大,下面来看看Spring都包含哪些核心的 ...

  10. 小程序&app 注册登录、绑定

    前段时间开发中的一款产品,有小程序和app:小程序直接微信登录,app使用手机号+验证码注册,手机号+验证码/密码登录. 用户使用其中一套账号密码即可正常使用,不强制要求完善另一套账号.为避免同一用户 ...