首页 > 其他 > 详细

Pandas的DataFrame

时间:2019-08-30 14:50:50      阅读:55      评论:0      收藏:0      [点我收藏+]

1. 手工创建DataFrame

1 a = [[1, 2, 2],[3,None,6],[3, 7, None],[5,None,7]]
2 data = DataFrame(a)

 2. Excel数据数据没有顶头的处理

 1 import os
 2 import pandas as pd
 3 base_path = "D:\\practicespace\\Python\\datasets"
 4 file_name = "data.xlsx"
 5 path = os.path.join(base_path, file_name)
 6 print(path)
 7 if(os.path.exists(path)):
 8     print("file exists")
 9 
10 data = pd.read_excel(path, sheet_name="Sheet4", header=2, usecols="C:J")
11 data.head()

 

3. 字段值统计

 data.Region.value_counts() 

output:

EOC    36675

SOC    28468

WOC    20460

NOC    16017

Name: Region, dtype: int64

4.字段包含特殊符号(比如空格)的索引方式

不能再采用".字段名“的方式,而是要采用字符索引方式:

1 print("region count: ", len(data.Region.value_counts()))
2 print("Sub Region count: ", len(data["Sub Region"].value_counts()))

 

或者去掉特殊,然后再进行字段直接索引

df = df.rename(columns=lambda x: x.replace("","").replace(",‘‘)).replace(" ","")

 

5. 缺失值处理

1)统计缺失值

1 total = data.isnull().sum().sort_values(ascending=True)
2 percent = (data.isnull().sum()/data.isnull().count()).sort_values(ascending=True)
3 table = pd.concat([total, percent], axis=1, keys=["total", "percent"])

 

2)删除缺失值的行列

1 # 使用dropna方法删除含有缺失值的行,默认是行
2 print(data.dropna())
3 # 删除含有缺失值的列
4 print(data.dropna(axis=1))

 

3)填充缺失值

 1 from pandas import DataFrame
 2 a = [[1, 2, 2],[3,None,6],[3, 7, None],[5,None,7]]
 3 data = DataFrame(a)
 4 print(data)
 5 # 统一填充缺失值为指定值
 6 print(data.fillna(0))
 7 # index=1(从0开始)列缺失值填充为1,index=2的列的缺失值填充为2
 8 print(data.fillna({1:1,2:2}))
 9 # 使用平均值进行填充
10 print(data.fillna(data.mean()))
11 # 前向填充,使用默认是上一行的值,设置axis=1可以使用列进行填充,不存在或者上一行也是None的时候就不填充
12 print(data.fillna(method="ffill"))
13 print()
14 # 后向填充,使用下一行的值,不存在或者下一行也是None的时候就不填充
15 print(data.fillna(method="bfill"))

 

6.遍历数据运算

 1 # 最原始,效率最低的迭代方案
 2 def myfunction(df):
 3     res_list = []
 4     for i in range(0,len(df)):
 5         res_list.append(df.iloc[i][first]/df.iloc[i][‘second])
 6     return disftance_list
 7 # 通过iterrows做遍历
 8 def haversine_looping(df):
 9     disftance_list = []
10     for index,row in df.iterrows():
11         disftance_list.append(row[‘high]/row[‘open])
12     return disftance_list
13 # Cython做了全局优化,效率比iterrow有所提高,这里注意axis必须要设置
14 df.apply(lambda row: row[‘high]/row[‘open], axis =1)
15 # pandas的矢量化处理,比较快,做了底层实现优化
16 dftest4[rate] = dftest4[high]/dftest4[open]
17 # 通过values将pandas的serias数据转化为numpy arrays,效率最高,因为numpy在底层做了C的预编译
18 dftest5[rate] = dftest5[high].values/dftest5[open].values

 

7. 列内容重置

1 df1[total] = df1.Jan + df1.Feb + df1.Mar
2 df1[category] = np.where(df1[total] > 200000, A, B)

 

这里注意,如果是total已经存在,可以通过df1.total的索引方式,但是如果是新创建的列,只能通过["columnName"]的方式进行索引。

8. 删除列

1 del DF[column-name]
2 DF= DF.drop(column_name, 1);
3 DF.drop(column_name,axis=1, inplace=True)
4 DF.drop([DF.columns[[0,1, 3]]], axis=1,inplace=True)   # Note: zero indexed

 

9. group

在pandas里面的group,分组和运算是分开的,对于聚合则是在group之后通过调用sum,mean之类的函数基于分组做运算;

1 # 单分组
2 groupall = data.groupby("Region")
3 groupall = groupall.sum()
4 groupall
5 # 多分组
6 groupall = data.groupby(["Region", "Sub Region"])
7 groupall = groupall.sum()
8 groupall

 

参考:

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

原文:https://www.cnblogs.com/xiashiwendao/p/11434462.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!