05. Python科学计算:Pandas

数据结构:Series 和 DataFrame

  • Series: 是一个定长的字典序列。有两个基本属性:index,values

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)

运行结果:

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

我们也可以采用字典的方式来创建 Series,比如:

  • DataFrame: 类似于数据库表的一种数据结构。我们甚至可以像操作数据库表那样对DataFrame数据进行
df1= DataFrame(data)
df2 = DataFrame(data, index=['ZhangFei', 'GuanYu', 'ZhaoYun', 'HuangZhong', 'DianWei'], columns=['English', 'Math', 'Chinese'])
print (df1)
print (df2)

运行结果:

 Chinese  English  Math
0       66       65    30
1       95       85    98
2       93       92    96
3       90       88    77
4       80       90    90
 English  Math  Chinese
ZhangFei         65    30       66
GuanYu           85    98       95
ZhaoYun          92    96       93
HuangZhong       88    77       90
DianWei          90    90       80

数据导入和输出

from pandas import Series, DataFrame
score = DataFrame(pd.read_excel('data.xlsx'))
score.to_excel('data1.xlsx')
print score

数据清洗

  1. 删除 DataFrame 中的不必要的列或行
df2 = df2.drop(columns=['Chinese'])
  1. 重命名列名
df2.rename(columns={'Chinese': 'YuWen', 'English': 'Yingyu'}, inplace = True)
  1. 去重复的值
df = df.drop_duplicates() # 去除重复行
  1. 格式问题
  • 更改数据格式
df2['Chinese'].astype('str') 
df2['Chinese'].astype(np.int64) 
  • 数据间的空格
# 删除左右两边空格
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()
  • 查找空值
df.isnull()

使用apply函数进行清洗

df['name'] = df['name'].apply(str.upper)

数据统计

image.png

describe 函数是个大礼包,里面包含各类统计

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

运行结果

          data1
count  5.000000
mean   2.000000
std    1.581139
min    0.000000
25%    1.000000
50%    2.000000
75%    3.000000
max    4.000000

数据表合并

df1 = DataFrame({'name':['ZhangFei', 'GuanYu', 'a', 'b', 'c'], 'data1':range(5)})
df2 = DataFrame({'name':['ZhangFei', 'GuanYu', 'A', 'B', 'C'], 'data2':range(5)})

创建两个 DataFrame作为测试数据

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

如何用 SQL 方式打开 Pandas

pandasql

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)

运行结果:

   data1      name
0      0  ZhangFei
image.png

你可能感兴趣的:(05. Python科学计算:Pandas)