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. (十二)Kubernetes 认证、授权与准入控制

    访问控制概述 API Server作为Kubernetes集群系统的网关,是访问和管理资源对象的唯一入口:包括kube-controller-manager.kube-scheduler.kubele ...

  2. (一)Kubernetes 系统基础

    Kubernetes介绍 什么是Kubernetes? Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署.自动扩缩容.维护等功能. 使用Kubernetes可以: ...

  3. 【转】tf.SessionRunHook使用方法

    原文地址:https://blog.csdn.net/mrr1ght/article/details/81011280 .本文有删减. tf.train.SessionRunHook()是一个类:用来 ...

  4. Django bootstrap按钮点击后激活active

    现在有个需求,就是在导航栏上有若干个按钮,我想实现的功能是当点击某个按钮后修改文字颜色,这样网站会更人性化.现总结方法如下: index.html: <ul class="navbar ...

  5. Java 多线程学习扩展

    http://www.imooc.com/video/5176 一.如何扩展Java并发知识 Java Memory Mode JMM描述了Java线程如何通过内存进行交互 happens-befor ...

  6. 20182310 第二周&第三周学习总结

    20182310 2019-2020-1 <数据结构与面向对象程序设计>第2周&第3周学习总结 教材学习内容总结 1.首先是String类定义的字符串,然后是print和print ...

  7. sublme text 3 快捷键

    1. 插件 codeFormatter 格式化插件 json格式化MAC快捷键  control + option + F

  8. 搭建java环境时,DOS输入java有反应,javac没反应的解决办法。

    2018-11-12 搭java环境踩了许多坑,之前搭环境时在命令台输入java有反应,javac没反应,后来试了很多方法都一样,然后就把java的所有的环境变量都删了,在控制面板里的卸载程序把所有的 ...

  9. Pandas模块 --- 字符与日期型数据的处理

    1,pd.to_datetime( 要转换的日期, format= ), 2,pd.to_datetime.today( ).year  ,pd.to_datetime.now( ).year 3,字 ...

  10. python 脚本接受参数

    import os import sys print(sys.argv) bogon:Desktop macname$ python3 test2.py deesws.json dede.json s ...