Python科学计算:Pandas

Pandas我也是以前听说过它的大名,但是没有真正的接触过,通过这门课的学习真的收获了很多。

Pandas主要是围绕:Series和DataFrame两种核心数据结构进行操作的

1.数据结构:Series和DataFrame

Series是一个定长的字典序列,在存储时相当于两个ndarray,意思是说series长度不能太长吗?也不太懂

Series有两个基本属性:index和values,index默认是0,1,2....,也可以指定。

import pandas as pd
from pandas import Series, DataFrame
x1 = Series([1,2,3,4])
x2 = Series(data=[1,2,3,4], index=['a', 'b', 'c', 'd'])
print x1
print x2

运行结果:

0    1
1    2
2    3
3    4
dtype: int64
a    1
b    2
c    3
d    4
dtype: int64

也可以使用字典的格式创建Series

d = {'a':1, 'b':2, 'c':3, 'd':4}
x3 = Series(d)
print x3 

DataFrame类似数据库表

import pandas as pd
from pandas import Series, DataFrame
data = {'Chinese': [66, 95, 93, 90,80],'English': [65, 85, 92, 88, 90],'Math': [30, 98, 96, 77, 90]}
df1= DataFrame(data)
df2 = DataFrame(data, index=['ZhangFei', 'GuanYu', 'ZhaoYun', 'HuangZhong', 'DianWei'], columns=['English', 'Math', 'Chinese'])
print df1
print df2

2.数据导入与输出

Pandas允许直接从xlsx、csv等文件中直接导入数据,也可以输出到xlsx,csv等文件

food_info = pandas.read_csv("food_info.csv")
print(type(food_info))# <class 'pandas.core.frame.DataFrame'>,类似于矩阵结构
print(food_info.dtypes) # 常见的有三种值:int64,float64,object(即字符),datetime,bool
print(help(pandas.read_csv))
food_info.head(num) # 如果不指定数据,默认显示前5条数据,如果指定数据,则显示num条数据
food_info.tail(num)
food_info.columns # 获取列名,并且保存为列表格式
food_info.shape # 数据维度
food_info.loc[0,] # 获得index为零的数据
food_info.loc[3:6] # 切片
food_info["NDB_NO",] # 根据列名来进行取值

3.数据清洗

(1)删除DataFrame中不必要的行或列

df2 = df2.drop(columns=['Chinese'])
df2 = df2.drop(index=['ZhangFei'])

(2)重命名列名columns

df2.rename(columns={'Chinese': 'YuWen', 'English': 'Yingyu'}, inplace = True)
df2.rename(index={'zhaoyun':'ZHAOYUN','dianwei':'DIANWEI'},inplace=True)

(3)去除重复的值

df = df.drop_duplicates() # 去除重复行

(4)格式问题

更改格式

df2['Chinese']=df2['Chinese'].astype('str') 
df2['Chinese']=df2['Chinese'].astype(np.int64) 

这里面str不加引号好像也是可以的。

数据间的空格

# 删除左右两边空格
df2['Chinese']=df2['Chinese'].map(str.strip)
# 删除左边空格
df2['Chinese']=df2['Chinese'].map(str.lstrip)
# 删除右边空格
df2['Chinese']=df2['Chinese'].map(str.rstrip)
df2['Chinese']=df2['Chinese'].str.strip('$')  #删除特殊字符

大小写转换

#列全部大写
df2.columns = df2.columns.str.upper()
# 列全部小写
df2.columns = df2.columns.str.lower()
# 列首字母大写
df2.columns = df2.columns.str.title()
#行全部大写
df2.index = df2.index.str.upper()
#行全部小写
df2.index = df2.index.str.lower()
#行首字母大写
df2.index = df2.index.str.title()

    查找空值

df2.isnull()  #得到表格是否有空值
df2.isnull().any()  #得到哪一列有空值

(5)使用apply函数对数据进行清洗

df['name'] = df['name'].apply(str.upper)
#使用apply实现对表格新增列
def plus(df,n,m):
    df['new1'] = (df[u'语文']+df[u'英语']) * m
    df['new2'] = (df[u'语文']+df[u'英语']) * n
    return df
df1 = df1.apply(plus,axis=1,args=(2,3,))

4.数据统计

在数据统计时,如果遇到null时直接排除

其中,Python3.x中好像以后argmin()将会被idxmin()取代,两个返回值是一样的。

注意其中的describe()函数

df1 = DataFrame({'name':['ZhangFei', 'GuanYu', 'a', 'b', 'c'], 'data1':range(5)})
print df1.describe()

5.数据表合并

df3 = pd.merge(df1, df2, on='name')     #基于name行进行合并
df3 = pd.merge(df1, df2, how='inner')   #内连接
df3 = pd.merge(df1, df2, how='left')    #左连接
df3 = pd.merge(df1, df2, how='right')   #右连接
df3 = pd.merge(df1, df2, how='outer')   #外连接

    

6.如何用sql带来Pandas

在Python中可以直接使用pandasql里的SQL语句来操作Pandas。pandasql的主要函数是sqldf,它接收两个参数:一个是SQL查询语句,还有一组环境变量globals()或locals()

import pandas as pd
from pandas import DataFrame
from pandasql import sqldf, load_meat, load_births
df1 = DataFrame({'name':['ZhangFei', 'GuanYu', 'a', 'b', 'c'], 'data1':range(5)})
pysqldf = lambda sql: sqldf(sql, globals())
sql = "select * from df1 where name ='ZhangFei'"
print pysqldf(sql)

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值