python基础 - Pandas

Pandas 是基于 Numpy 创建的 Python 库,为 Python 提供了易于使用的数据结构和数据分析工具。

使用以下语句导入 Pandas 库:

import pandas as pd

1、Pandas 数据结构

(1)Series - 序列

存储任意类型数据的一维数组:

s = pd.Series([3, -5, 7, 4], index=['a', 'b', 'c', 'd'])
index value
a 3
b -5
c 7
d 4

(2)DataFrame - 数据框

存储不同类型数据的二维数组

data = {'Country': ['Belgium', 'India', 'Brazil'],
        'Capital': ['Brussels', 'New Delhi', 'Brasília'],
        'Population': [11190846, 1303171035, 207847528]}
df = pd.DataFrame(data, columns=['Country', 'Capital', 'Population'])
index Country Capital Population
0 Belgium Brussels 11190846
1 India New Delhi 1303171035
2 Brazil Brasília 207847528

2、输入/输出

详细参考:https://blog.csdn.net/qq_19446965/article/details/106882889

(1)读取/写入CSV

pd.read_csv('test.csv', header=0, nrows=3)
df.to_csv('test.csv')

(2)读取/写入Excel

pd.read_excel('test.xlsx')
pd.to_excel('test.xlsx', sheet_name='Sheet1')
# 读取内含多个表的Excel
xlsx = pd.ExcelFile('test.xls')
df = pd.read_excel(xlsx, 'Sheet1')

(3)读取和写入 SQL 查询及数据库表

from sqlalchemy import create_engine
engine = create_engine('sqlite:///:memory:')
pd.read_sql("SELECT * FROM my_table;", engine)
pd.read_sql_table('my_table', engine)
pd.read_sql_query("SELECT * FROM my_table;", engine)

read_sql()是 read_sql_table() 与 read_sql_query()的便捷打包器

pd.to_sql('myDf', engine)

3、选取、布尔索引及设置

s['b']  # 取序列的值 -5
df[1:]  # 取数据框的子集
#   Country    Capital  Population
# 1   India  New Delhi  1303171035
# 2  Brazil   Brasília   207847528

区域选取:

  区域选取可以从多个维度(行和列)对数据进行筛选,可以通过df.loc[],df.iloc[],df.ix[]三种方法实现。采用df.loc[],df.iloc[],df.ix[]这三种方法进行数据选取时,方括号内必须有两个参数,第一个参数是对行的筛选条件,第二个参数是对列的筛选条件,两个参数用逗号隔开。df.loc[],df.iloc[],df.ix[]的区别如下:

  • df.loc[]只能使用标签索引,不能使用整数索引,通过便签索引切边进行筛选时,前闭后闭。
  • df.iloc[]只能使用整数索引,不能使用标签索引,通过整数索引切边进行筛选时,前闭后开。
  • df.ix[]既可以使用标签索引,也可以使用整数索引。

单元格选取:

  单元格选取包括df.at[]和df.iat[]两种方法。df.at[]和df.iat[]使用时必须输入两个参数,即行索引和列索引,其中df.at[]只能使用标签索引,df.iat[]只能使用整数索引。df.at[]和df.iat[]选取的都是单个单元格(单行单列),所以返回值都为基本数据类型

(1)按位置

df.iloc[[0], [0]]   # 按行与列的位置选择某值:
#    Country
# 0  Belgium
df.iat[0, 0]    # 'Belgium'

(2)按标签

df.loc[[0], ['Country']]
#    Country
# 0  Belgium
df.at[0, 'Country']         # 'Belgium'

(3)按标签/位置

df.ix[2]
# Country Brazil
# Capital Brasília
# Population 207847528
df.ix[:, 'Capital']
# 0 Brussels
# 1 New Delhi
# 2 Brasília
df.ix[1, 'Capital']   # 'New Delhi'

(4)布尔索引

s[~(s > 1)]                         # 序列 S 中没有大于1的值
# b   -5
s[(s < -1) | (s > 2)]               # 序列 S 中小于-1或大于2的值
# a    3
# b   -5
# c    7
# d    4
df[df['Population'] > 1200000000]   # 使用筛选器调整数据框
#   Country    Capital  Population
# 1   India  New Delhi  1303171035

4、删除数据

s.drop(['a', 'c'])          # 按索引删除序列的值 (axis=0)
df.drop('Country', axis=1)  # 按列名删除数据框的列(axis=1)

5、排序和排名

df.sort_index()                 # 按索引排序
df.sort_values(by='Country')    # 按某列的值排序
df.rank()                       # 数据框排名
#    Country  Capital  Population
# 0      1.0      2.0         1.0
# 1      3.0      3.0         3.0
# 2      2.0      1.0         2.0

6、查询序列与数据框的信息

(1)基本信息

df.shape        # (行,列))
# (3, 3)
df.index        # 获取索引
# RangeIndex(start=0, stop=3, step=1)
df.columns      # 获取列名
# Index(['Country', 'Capital', 'Population'], dtype='object')
df.info()       # 获取数据框基本信息
# <class 'pandas.core.frame.DataFrame'>
# RangeIndex: 3 entries, 0 to 2
# Data columns (total 3 columns):
# Country       3 non-null object
# Capital       3 non-null object
# Population    3 non-null int64
df.count()      # 非Na值的数量
# Country       3
# Capital       3
# Population    3

(2)统计信息

df.sum()                  # 求和
df.cumsum()               # 累加
df.min()                  # 最小值
# Country        Belgium
# Capital       Brasília
# Population    11190846
df.max()                  # 最大值
# Country            India
# Capital        New Delhi
# Population    1303171035
df['Population'].idxmin() # 最小值索引: 0
df['Population'].idxmax() # 最大值索引: 1
df.mean()                 # 平均值
df.median()               # 中位数
df.describe()             # 基础统计数据
#          Population
# count  3.000000e+00
# mean   5.074031e+08
# std    6.961346e+08
# min    1.119085e+07
# 25%    1.095192e+08
# 50%    2.078475e+08
# 75%    7.555093e+08
# max    1.303171e+09

7、应用函数 

df.apply(lambda x: x*2)       # 应用函数
df.applymap(lambda x: x*2)    # 对每个单元格应用函数
#           Country             Capital  Population
# 0  BelgiumBelgium    BrusselsBrussels    22381692
# 1      IndiaIndia  New DelhiNew Delhi  2606342070
# 2    BrazilBrazil    BrasíliaBrasília   415695056

8、数据对齐

如有不一致的索引,则使用NA值:

s3 = pd.Series([7, -2, 3], index=['a', 'c', 'd'])
s + s3
# a 10.0
# b NaN
# c 5.0
# d 7.0

 还可以使用 Fill 方法进行内部对齐运算:

s.add(s3, fill_value=0)
# a 10.0
# b -5.0
# c 5.0
# d 7.0
s.sub(s3, fill_value=2)
s.div(s3, fill_value=4)
s.mul(s3, fill_value=3)

摘自DataCamp
Learn Python for Data Science Interactively

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章